Devo effettuare una query, il cui risultato dipende dall'incrocio di tre diverse variabili (chiamiamole $loc, $tag e $kind), di cui una può avere 7 diversi valori, e le altre due tre valori ciascuna. Insomma, un totale di 63 possibili combinazioni diverse...
Decisamente troppe per mettersi a costruire una serie di if... else!
Per fare un esempio più chiaro, definisco un caso-tipo:
la mia query deve richiamare dalla tabella 'news' tutti i record che corrispondono a queste occorrenze
Codice PHP:
WHERE location = '$europa' AND tag = '$art' AND kind = '$exhibit'
Le tre variabili (che qui ho nominato diversamente, solo per far capire il genere di categorie che definiscono) sono ricavate dinamicamente attraverso un'altra query precedente.
Insomma, se l'utente Tizio si è registrato per conoscere solo le news relative a mostre d'arte in Europa, la mia query deve restituire solo queste.
Francamente, non riesco ad immaginare un sistema che possa evitare di creare 63 query diverse, una alternativa all'altra, quante sono le combinazioni possibili...
Salvo che questa.
Poiché i campi di tabella relativi a queste variabili possono contenere o meno un dato (dipende se l'utente ha esercitato un'opzione di scelta o no), potrebbe - ad esempio - darsi una row in cui i tre campi siano pieni (europe / art / exhibit), ma in un'altra potrebbero essere vuoti ; in tal caso, devo considerare la condizione come equivalente ad una scelta di vedere tutto.
Quindi, pensavo di creare una query più o meno, così:
Codice PHP:
"SELECT * FROM news WHERE $location AND $taggation AND $kindation"
(non so se la sintassi è corretta e funzionerebbe)
laddove, in base ai risultati della query precedente, definisco tre variabili in questo modo:
Codice PHP:
if ($row[loc] == "") {
$location = "dove = '???????????'";
} else {
$location = "dove = $row[loc]";
}
stessa cosa per le altre due. Ovvero, se c'è un valore, lo attribuisco alla variabile, altrimenti quello che mi occorre è poter definire quest'altra eventualità in modo tale che nella query vengano richiamati tutti i record, qualunque sia il valore del campo considerato.
Insomma, sempre per fare un esempio, se le news hanno come valore del campo dove USA, Italy, France, Spain, China, e nel campo dove della tabella utenti non è indicato nulla, la query di quell'utente deve mostrare tutte le news.
Spero di essere riuscito a non essere (troppo) involuto nel discorso!