Non è facile ma cercherò di essere chiaro nell'esporre il mio problema.
Si tratta di costruire un motore di ricerca.
Ora il motore ha solo un campo di testo il cui valore può essere riferito ad un dato nel database, a discrezione dell'utente.
Per esempio l'utente cerca "tromba" e vuole che tale dato sia riferito allo strumento.
Il motore allora prima seleziona gli strumenti e poi esegue la clausola WHERE per vedere se tra questi vi è lo strumento "tromba".
Chiaramente l'utente può anche cercare "Miles Davis" ed allora non vuole che tale stringa sia riferita allo strumento, ma al musicista: il motore allora agisce di conseguenza selezionando tutti i musicisti e poi confrontandoli attraverso WHERE con la stringa ricercata.
Io vorrei avere un altra stringa di ricerca simile alla prima, perchè ad esempio voglio trovare tutti i cd dove Miles Davis suona le tastiere (orribile bestemmia) ed allora nel primo campo inserisco "Miles Davis" riferito al musicista, nel secondo inserisco "tastiere" riferito allo strumento.
In tal caso il motore dovrebbe prima cercare tra i musicisti se c'è Miles Davis, poi cercare tra gli strumento suonati da Miles se ci sono le tastiere.
Purtroppo per far questo ho bisogno di una prima ricerca, un primo WHERE, una seconda ricerca ed un secondo WHERE. Ma mysql non mi permette di eseguire ulteriori ricerche dopo WHERE, per cui non so come fare ad eseguire la seconda ricerca.
Spero sia abbastanza chiaro il concetto, ma inserisco anche uno stralcio del codice così da capirci meglio.
Grazie a chiunque voglia aiutarmi, se non altro per la pazienza d'aver letto questa lunga elucubrazione.Codice PHP:if (!empty($_SESSION['principale'])&&$_SESSION['principale']!="") {
switch ($_SESSION[ricerca]) {
case "autore":
$query.="INNER JOIN cd_musicisti_autori cd_m_a
ON c.id = cd_m_a.id_cd
INNER JOIN musicisti m
ON cd_m_a.id_musicisti = m.id
WHERE concat(m.nome,' ',m.cognome) LIKE '%$_SESSION[principale]%' ";
break;
case "musicista":
$query.="INNER JOIN cd_musicisti cd_m
ON c.id = cd_m.id_cd
INNER JOIN musicisti m
ON cd_m.id_musicisti = m.id
WHERE concat(m.nome,' ',m.cognome) LIKE '%$_SESSION[principale]%' ";
break;
case "strumento":
$query.="INNER JOIN cd_musicisti cd_m
ON c.id = cd_m.id_cd
INNER JOIN musicisti m
ON cd_m.id_musicisti = m.id
INNER JOIN musicisti_strumenti = m_str
ON m.id = m_str.id_musicisti
INNER JOIN strumenti = str
ON str.id = m_str.id_strumenti
WHERE str.strumento LIKE '%$_SESSION[principale]%' ";
break;
case "traccia":
$query.="INNER JOIN cd_tracce cd_tr
ON c.id = cd_tr.id_cd
WHERE cd_tr.traccia LIKE '%$_SESSION[principale]%' ";
break;
case "autore_tracce":
$query.="INNER JOIN cd_tracce cd_tr
ON c.id = cd_tr.id_cd
INNER JOIN tracce_autori_tracce t_a_t
ON cd_tr.id = t_a_t.id_cd_tracce
INNER JOIN autori_tracce au_tr
ON t_a_t.id_autori_tracce = au_tr.id
WHERE concat(au_tr.nome,' ',au_tr.cognome) LIKE '%$_SESSION[principale]%' ";
break;
default:
$query.="WHERE $_SESSION[ricerca] LIKE '%$_SESSION[principale]%' ";
break;
}
$unione="AND ";
} else {
$unione="WHERE ";
}
if (!empty($_SESSION['secondaria'])&&$_SESSION['secondaria']!="") {
switch ($_SESSION[ricerca_secondaria]) {
case "autore":
$query.="INNER JOIN cd_musicisti_autori cd_m_a
ON c.id = cd_m_a.id_cd
INNER JOIN musicisti m
ON cd_m_a.id_musicisti = m.id
WHERE concat(m.nome,' ',m.cognome) LIKE '%$_SESSION[secondaria]%' ";
break;
case "musicista":
$query.="INNER JOIN cd_musicisti cd_m
ON c.id = cd_m.id_cd
INNER JOIN musicisti m
ON cd_m.id_musicisti = m.id
WHERE concat(m.nome,' ',m.cognome) LIKE '%$_SESSION[secondaria]%' ";
break;
case "strumento":
$query.="INNER JOIN cd_musicisti cd_m
ON c.id = cd_m.id_cd
INNER JOIN musicisti m
ON cd_m.id_musicisti = m.id
INNER JOIN musicisti_strumenti = m_str
ON m.id = m_str.id_musicisti
INNER JOIN strumenti = str
ON str.id = m_str.id_strumenti
WHERE str.strumento LIKE '%$_SESSION[secondaria]%' ";
break;
case "traccia":
$query.="INNER JOIN cd_tracce cd_tr
ON c.id = cd_tr.id_cd
WHERE cd_tr.traccia LIKE '%$_SESSION[secondaria]%' ";
break;
case "autore_tracce":
$query.="INNER JOIN cd_tracce cd_tr
ON c.id = cd_tr.id_cd
INNER JOIN tracce_autori_tracce t_a_t
ON cd_tr.id = t_a_t.id_cd_tracce
INNER JOIN autori_tracce au_tr
ON t_a_t.id_autori_tracce = au_tr.id
WHERE concat(au_tr.nome,' ',au_tr.cognome) LIKE '%$_SESSION[secondaria]%' ";
break;
default:
$query.="WHERE $_SESSION[ricerca_secondaria] LIKE '%$_SESSION[secondaria]%' ";
break;
}
$unione="AND ";
} else {
$unione="WHERE ";
}

Rispondi quotando