PHP/SQL: filtrare la ricerca nel database

Salve a tutti, sono nuovo sia nel forum che come programmatore php e sql...
la mia domanda è un pò tecnica:
Ho creato una tabella in un database con 5 campi: Id, nome, mese, anno citta, dove chiaramente ho inserito una decina di record.
Dopo di che nella mia pagina php ho creato un modulo dinamico con 4 elenchi menu in modo che un utente possa filtrare la ricerca in base ai criteri inseriti ovvero: scelta del nome, scelta del mese, scelta dell'anno e della citta creando la query in questo modo:
SELECT* from tabella_iscritti WHERE nome = colname AND mese=colname 2 AND anno = colname3 AND citta = colname4 (dove colname è il nome che ho dato al menu dinamico per ogni voce) ed inquesto modo tutto funziona, ovvero, l'utente sceglie per ogni menu un nome un mese un anno ed una citta ed vengono estratti i dati corrispondenti per esempio tutti i marco del mese di gennaio del 1982 di bergamo. Però io vorrei che l'utente non sia obbligato ad inserire per forza tutti i 4 i campi, ma che possa avere la possibilità di scegliere anche solo un campo per es. il mese in modo che estragga tutti gli iscritti che corrispondano a quel mese o a quell'anno. Inizialmente avevo provato in questo modo: SELECT* from tabella_iscritti WHERE nome = colname AND mese=colname 2 AND anno = colname3 AND citta = colname4 OR (nome=colname) OR (mese=colame2) ecc. ma ho notato che in questo modo non funziona benissimo, nel senso che funziona se effettuo delle ricerche singole (o mese, o anno o nome ecc ecc) ma nel momento che poi mi trovo a selezionare tutti i camp allora estrae un pò di tutto, cioè, che se metto mese=gennaio Anno=1982 citta=bg nome=beppe mi tira fuori tuti i gennaio anche se non sono del 1982 ecc. ecc.
Ora, spero di essermi spiegato, io vorrei che di questi 4 campi (nome, mese, anno, cita) un utente possa scegliere o solo 1 campo (per es. solo il mese o solo l'anno ), oppure due campi (mese e anno, citta e mese ecc ecc.), oppure tutti e 4 i campi, a scelta. Spero di essermi spiegato e ringrazio davvero di cuore che mi possa illuminare e spiegare come poter impostare la query, sono 2 giorni che ci sbatto contro come una mosca contro un vetro :-). Un saluto

 NeofitaPHP, N.D.

Ti rispondo non perchè sia un esperto sql, né tantomeno perché ho la soluzione al tuo problema ma, solo perchè hai solleticato la mia curiosità, dunque, in primis ti debbo dire che non sei proprio chiarissimo ma, vediamo di ragionarci sopra un pò.
Una cosa è lampante, fare una ricerca AND non è la stessa cosa di fare una ricerca OR, d'altronde lo dici da solo affermando che se si tratta di ricercare sui 5 campi AND va bene però su singoli campi lavora male; mentre, usando OR va bene su singolo campo ma, si perde su tutti.
Penso che tu usi il PHP per far partire queste ricerche, se lo dovessi fare io, farei in modo da operare delle scelte:
- Se la richiesta è formata da un solo campo;
- Allora la ricerca va fatta con OR.
- Se la richiesta viene fatta su pi√Ļ campi;
- Allora la ricerca va fatta con AND.
Non vorrei che il caldo mi avesse fatto sproloquiare... Auguri a tutti per un ottimo ferragosto...!

 glyphs, N.D.

Grazie per la risposta.... esatto... io vorrei fare in modo che un utente possa scegliere quanti campi decide, ovvero... ricerca per: tutti i campi... solo un campo.... solo 2 campi...solo 3 campi...a scelta....

 NeofitaPHP, N.D.

Visto che ci siamo capiti e, sempre restando a grandi linee, per risolvere il problema, a mio parere, dovresti creare un form per interagire con l'utente, in modo che questi, possa scegliere quali e quanti campi con l'inserimento dei rispettivi valori.
Passare poi i dati mediante i metodi $_GET oppure $_POST allo script in php che gestirà l'evento fino alla richiesta della ricerca appropriata e sua visualizzazione.
Quindi, adesso bisogna passare dalle parole ai fatti, auguri per la soluzione...

 glyphs, N.D.

...tutto chiaro ;) ....si, chiaramente un form con elenco menu lo avevo già preparato in modo appunto da permettere ad un utente la scelta dei campi. Grazie ancora

 NeofitaPHP, N.D.

allora...dopo qualche anno di programmazione in php (9 anni quasi 10) ho imparato una piu del diavolo per trattare elementi provenienti dal form...
ad ogni modo per fare una ricerca "pseudo dinamica" dovresti fare dei controlli...
in modo barbaro:
$nome = "";
$cognome = "";
// e gli altri... $_GET['nome'] != '' ? $nome = addslashes($_GET['nome']) : $nome = '%'; // lo ripeti per gli altri campi
// La variabile GET di nome è diverso da vuoto ? se si mi metti il suo valore dentro la var $nome altrimenti nella var nome metti il wildcard // costrutto query
SELECT* from tabella_iscritti WHERE nome = '$nome' AND mese='$mese' AND anno = '$anno' AND citta = '$citta' in questo modo se "l'utonto" non metto 1 di qualsiasi variabile mysql ti restituisce tutto cio' che matcha con gli altri campi... spero di essere stato chiaro...

001design.it ® è un marchio registrato.
© 2004-2017 Molfese Paolo - P.Iva: 03430820617 - All rights reserved | Tutti i diritti sono riservati.