scusate, avrei un problema
ho implementato il motore di ricerca per le NEWS che si trova sul tutorial del sito adattandolo per il mio Database di gestione Anatomia Patologica, funziona, ma si riesce solo a fare la ricerca con il parametro OR, non con quello AND, mi spiego meglio
la query è fatta così:
$chiave=$_POST['chiave'];
$keys = explode (" ", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "nome LIKE '%$parola%' OR cognome LIKE '%$parola%' OR nascita LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT * FROM cartellini WHERE " . $query;
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result)){
echo "<TR><td width=80>".$row['archivio']."</td><td width=120>[b]".$row['cognome']."</td><td width=60>[b]".$row['nome']."</td><td width=60>".$row['nascita']."</td><td width=60>".$row['datacampione']."</td><td width=80>".$row['reparto']."</td><td width=80>".$row['materiale']."</td><td width=80>".$row['tipo']."</td></tr>";
echo "<tr><td colspan=2></td><td colspan=6>".$row['referto']."</td>";
}
come vedete è praticamente uguale a quella del motore di ricerca per news sul tutorial,
io ho modificato la query in questo modo:
$query .= "nome LIKE '%$parola%' AND cognome LIKE '%$parola%' AND nascita LIKE '%$parola%' OR ";
con il parametro OR mi trova tutti i record, anche quelli che non mi servono, con tutti i parametri AND non mi trova più niente, ma io sono sicuro chge esistono almeno tre record di un nominativo che risponda ai tre parametri che io gli passo, questi record appaiono solo se si usa OR e fin qui tutto bene, il problema è che assieme ci sono tutti gli altri record che hanno a che fare con gli stessi parametri, tutti quelli che hanno lo stesso cognome, tutti quelli che hanno lo stesso nome, tutti quelli nati nella stessa data, un marasma, visto che ho a che fare con più di 65.000 record.
La cosa strana è che se metto AND sul cognome, in questo modo:
$query .= "nome LIKE '%$parola%' AND cognome LIKE '%$parola%' OR nascita LIKE '%$parola%' OR ";
la cosa funziona, è già un passo avanti per restringere il campo, ma mi trova anche tutti gli altri nati alla stessa data di nascita, ma se metto AND anche nel terzo criterio:
$query .= "nome LIKE '%$parola%' AND cognome LIKE '%$parola%' AND nascita = '%$parola%' OR ";
non mi trova più niente!!
secondo voi come mai?
Ci sto sbattendo la testa, considerando che il database serve per gestire una piccola Anatomia Patologica del mio ospedale, vi lascio immaginare l'importanza, l'utente deve fare una ricerca con una ragionevole sicurezza di avere tutto lo storico di un paziente, senza altri record, si tenga presente che non è possibile aggiungere il codice fiscale per motivi operativi di reparto.
Ringrazio calorosamente chiunque possa aiutarmi.