Mysql e php: Due problemi, n soluzioni.

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Eidolon
00venerdì 30 luglio 2004 19:47
con n diverso da 0, spero...

Sto scianfrellando di nuovo col php, e mi trovo di fronte a uno di quegli ostacoli insormontabili che aspettano lì, nel paradiso degli ostacoli insormontabili, fino a quando un miserabile inetto di provincia tenta di improvvisarsi programmatore. Allora escono dagli ostacoli insormontabili, si fanno carne e bit e ti si piazzano davanti. [quante parole inutili per dire "ho due problemi col php"]

Allora, più che altro il problema è con il mysql.
Io ho un form in una pagina. Inserendo varie informazioni in questo form, si può accedere al database, e i dati risultanti appaiono nella pagina php.
[cioè... il form è e la pagina con i risultati è "risultato.php"]
Il database si tratta di libri. Nella tabella ci sono elencati Cognome, Nome, Cognome2, Nome2, Cognome3, Nome3, Titolo, Editore ed altro che non è importante. L'importante sono i nomi e cognomi.

Nel form di ricerca si può effettuare una ricerca, appunto, soltanto per Cognome. Cioè c'è la casella "Cognome", non anche cognome2 e 3. Come faccio io a far sì che in risultato.php appaiano anche i risultati cercati nelle colonne cognome2 e 3?
Cerco di spiegarmi...

la query che si trova in risultato.php è la seguente

$query = mysql_query("SELECT * FROM 'libri' " . "WHERE 1 AND 'Titolo' LIKE '%$titolo%' AND 'Cognome' LIKE '%$cognome%' AND 'Editore' LIKE '%$editore%' ORDER BY '$ordine'");

dove le variabili gli vengono date col metodo POST dal form nella pagina di ricerca.
Lui praticamente va a cercare in 'libri' tutte le rige dove Cognome contiene il testo inserito nella casella del cognome, nella pagina di ricerca, e arrivato a risultato.php nella variabile $cognome.
Io ho provato a fare una cosa del genere

$query = mysql_query("SELECT ...... 'Cognome' LIKE '%$cognome%' AND 'Cognome2' LIKE '%$cognome%' AND 'Cognome3' LIKE '%$cognome%'


cioè fargli cercare la stessa variabile $cognome in 3 colonne contemporaneamente, ma non funziona.

Sperando che mi sia fatto capire, è possibile ottenere una cosa del genere? Cioè far cercare una stessa variabile in + colonne del database?

Il secondo problema lo spiego dopo, anche se credo sia + facile...
Eidolon
00venerdì 30 luglio 2004 19:58
Secondo problema
[argh, il code ha sforato la grafica -_-]

Problema più semplice [credo/spero]. Sempre nello stesso database, voglio ottenere la lista di tutti gli autori presenti nella mia biblioteca. L'ho ottenuta, ma ovviamente ogni autore è ripetuto tante volte quanti sono i libri che ho in biblioteca.
Il problema sarebbe quindi il seguente: Come posso ottenere la lista di tutti i dati presenti in una colonna, senza però le ripetizioni?
Risolto questo però, i due problemi si fondono. Perchè nella lista degli autori, gradirei che ci fossero non solo quelli presenti in "Cognome", ma anche quelli in "Cognome2" e "Cognome3", e non separati.

Facciamo un esempio. Io ho in biblioteca "Olimpo Spa" di Cerami&Ziche. In Cognome c'è Cerami, in Nome c'è Vincenzo, in COgnome2 c'è Ziche e in Nome2 c'è Silvia, poichè ci sono due autori, uno deve essere il primo e l'altro il secondo per forza.
Ho soltanto questo libro di Silvia Ziche. Facciamo finta che non lo sappia :P (di avere un solo libro della ziche...)
Vado a fare la ricerca, inserisco Ziche nel campo cognome, ma ovviamente non trova niente, OPPURE, vado alla lista alfabetica di tutti gli autori, ma Ziche non sta da nessuna parte (perchè per la riga di Olimpo Spa appare già Cerami). Quindi sarei portato a credere di non aver alcun libro di silvia ziche, cosa spudoratamente falsa :P [vabbè, considerando che nell'elenco dei libri non ho messo i fumetti...]

Spero che mi abbiate capito, grazie per l'attenzione e scusate per l'ingarbugliamento... se volete altre scuse, informatemene in privato e sarò lieto di profondermivi in pubblico...



[profondermivi :o ho paura...]
Morpheu5
00sabato 31 luglio 2004 10:52
Non c'ho capito una fava, scusa...
Eidolon
00sabato 31 luglio 2004 14:54
sigh immaginavo... non credo di saperlo spiegare meglio, se becco qualche anima buona in chat o pseudotale, chiederò...
Leonard Vertighel
00lunedì 2 agosto 2004 23:44
Ho appena consegnato il mio progetto di sito di catena di multicinema in php\mysql mi sono beccato il mio primo 30eLode!!!

cmq, apparte l'evidente egocentrismo dovresti:

per la seconda problematica basta aggiungere DISINCT dopo il select e non compartiranno le ripetizioni.

per il primo problema secondo me dovresti mettere gli 'or' e NON gli 'and' quando fai ...WHERE cogn="", cogn2="", cogn3""... perchè cosi' facendo cerchi le tabelle che contengono tutti e tre i campi uguali CONTEMPORANEAMENTE alla stringa ricercata



Leonard Vertighel
00lunedì 2 agosto 2004 23:59
cmq, da quanto ho capito, i tuoi problemi maggiori nascono dal fatto di una poca attenzione nello strutturare lo schema entità/relazioni del database.

Se, come ho capito, nel tuo caso hai libri con più autori, NON DEVI CREARE tabelle x i libri con noe1, copgn1, nome2, cogno2 etc... è da pazzi.

Qualla autori-libri è una tipica relazione MxN poichè 1 autore può scrivere N libri e ogni libro può essere scritto da più autori. Ti occorrono perciò 3 tabelle: 1 per i libri, 1 per gli autori e una per gli accoppiamenti.

Esempio, abbiamo i seguenti libri:

olimpo spa(cerami, ziche. italia. 2000);
blabla(ziche. francia. 2001);
xxx(barbucci, cerami, ziche. italia. 1999);

allora dovrai avere le seguenti tabelle:
Libro (codice_libro,NomeLibro,Nazione,Anno) ;
Autore (codice_autore, Nome, Cognome, NatoA, Sesso) ;
ScrittoDa (codice_libro,codice_autore);

con codLibro e cdoAutore chiavi primarie delle prime due entità e chiavi esterne della relazione ScrittoDa (che cmq è una tabella.
Nel nostrocaso:

LIBRO
codice_libro - NomeLibro - Nazione - Anno
001 - OlimpoSpa - Italia - 2000
002 - blabla - Francia - 2001
003 - xxx - Italia - 1999

AUTORE
codice_autore - Nome - Cognome - NatoA - Sesso
001 - vincenzo - cerami - venezia(?)- M
002 - silvia - ziche - boh - F
003 - ale - barbucci- boh - M

SCRITTODA
codice_libro - codice_autore
001 - 001
001 - 002
002 - 002
003 - 001
003 - 002
003 - 003


Ecco.
Per cercare per cognome devi poi fare un NATURAL JOIN tra le 3 tabelle



OK???
;)


RICORDA CHE LA PROGETTAZIONE DEL DATABASE E' LA COSA PIU' IMPORTANTE: CHE SENSO HA FARE COGNOME1, 2, 3 ? COSI PONI UN LIMITE AGLI AUTORI, OCCUPI SPAZIO INUTILE X I LIBRI CON MENO D 3 AUTORI, SCRIVI QUERY DA SFASCIARTI LA TESTA E SE T VEDESSE IL MIO PROF. DI BASI D DATI TI BRUCEREBBE VIVO...
[SM=x68096]




___ Quanti programmatori ci vogliono per avvitare una lampadina? Nessuno, e' un problema hardware. ___

[Modificato da Leonard Vertighel 03/08/2004 0.03]

Leonard Vertighel
00sabato 4 settembre 2004 22:05



Ci sei riuscito poi a risolvere?



PkerTyxy
00domenica 5 settembre 2004 07:26
ma sta discu non era antica quanto i miei progetti per la cuccia del gatto che ho depositato al catasto, di cui non mi hanno ancora fatto avere notizia?
Leonard Vertighel
00domenica 5 settembre 2004 10:16


no



Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 02:54.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com