SQL query con selezione multipla di LIKE

Ciao a tutti,

mi presento, sono nuovo qui, mi chiamo Massimo e sono un novello anche nella programmazione in php, cercherò di essere il più chiaro che posso nel porre la mia domanda ringraziando eventuali anime pie :) che desiderino darmi una mano.

Dunque ho un database in mysql che praticamente è un indirizziario da cui vengono estratti dei nominativi :

$result = @mysql_query("select * from rubrica order by fNome asc");

e fin qui nessun problema, ora però necessito di estrarre solo i nomi delle persone con una o più determinate iniziali, pertanto inserirò un preventivo checkbox a selezione multipla che con un form acquisirà le lettere da selezionare. Se si trattasse di una sola lettera alla volta non sarebbe ovviamente un problema, farei così:

$lettera ="A";
$result = @mysql_query("select * from rubrica where fNome LIKE '$lettera%' order by fNome asc");

ma se la selezione è di più lettere, come faccio ad attribuire al LIKE i diversi valori? Immagino aggiungendo un OR ed inserendo la query in un ciclo ma avrei bisogno di un aiuto per la stesura del codice :)

Grazie a tutti!

Massimo

inviato 4 anni fa
coccobil
X 0 X
$lettere = array('A', 'B', 'C', 'D');
$condizioni = '';
foreach($lettere as $lettera)
{
    $condizioni .= " fNome LIKE '$lettera%' OR";
}
$condizioni = substr($condizioni, 0,-3); //tolgo le ultime 3 lettere
$result = @mysql_query("select * from rubrica where '$condizioni' order by fNome asc");

Dovrebbe funzionare così.

risposto 4 anni fa
gbenfe
gbenfe
16
Le ultime tre lettere vengono rimosse per evitare la creazione di una query malformata, infatti se i tre caratteri " OR" della variabile $condizioni non venissero rimossi la query risulterebbe in un errore!Andrea Turso 4 anni fa
Ciao Gbenfe e Andrea, anzitutto grazie per il Vostro intervento ed aiuto, in effetti credo di avere interpretato correttamente la logica dello script, mi era oscura la parte della substr ma Andrea mi ha chiarito :-) Purtroppo però lo script mi restiyuisce un errore quando vado a stampare a video i risultati: while ($row = mysql_fetch_array($result)) -->Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/..ecc... Qualche idea? Grazie ragazzi e scusatecoccobil 4 anni fa
Puoi fare un echo della query e testarla direttamente in mysql e vedi cosa ti restituisce, in modo da verificare se è un errore php o sql.gbenfe 4 anni fa
X 0 X X

Ciao ragazzi, uso l'opzione "risposta" perchè ho modificato leggermente il codice per farlo funzionare, altrimenti anche dopo numerosi controlli non trovavo errori nelle parti precedenti e posteriori al codice che mi avete suggerito.
Ecco la versione che gira sul mio script:

$lettere = array('A', 'B', 'C', 'D');

$condizioni = '';

foreach($lettere as $lettera)

{

    $condizioni .= " fNome LIKE '$lettera%' OR";

}

$condizioni = substr($condizioni, 0,-3); //tolgo le ultime 3 lettere

$result = mysql_query("select * from rubrica where".$condizioni." order by fNome asc");

Grazie ancora!

risposto 4 anni fa
coccobil
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda