problemino con motore di ricerca :(

searedone

Utente Attivo
11 Giu 2010
508
0
0
Ciao a tutti, chi mi puo' aiutare plesa...

Ho sul mio sito un motore di ricerca che funziona correttamente se interrogo una tabella, ora io vorrei fargli interrogare più tabelle del db ma mi da errore

Column 'tipo' in where clause is ambiguous

Le ho provate tutte ma niente, vi posto lo script se qualcuno sa dove sbaglio e mi aiuta grazie mille

Modulo di ricerca:

PHP:
<form action='testcerca.php?ricerca=ok' method='POST'> 





  <input type='text' tabindex='15' name='cerca' class='input' size="15" > 
   

  <input type="image" src="immagini/trova.gif"  value='Cerca'> 

        </form>

Motore che cerca e restituisce i link :

PHP:
<?php 

// connettiamoci il nostro database 

$db_host = "localhost"; 
$db_user = ""; 
$db_password = ""; 
$db_name = ""; 

//connetto il database 

$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione'); 
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db'); 

// recuperiamo il valore ricerca inviato con get 

$ricerca = $_GET['ricerca']; 

// vediamo se è stato inviato, e quindi uguale a ok 

if ( $ricerca == 'ok' ) { 

// recuperiamo ora cerca inviato con post 

$cerca = $_POST['cerca']; 

// vediamo se è stato compilato il campo 

if ( $cerca == TRUE && $cerca != "" ) { 

// ora vediamo se supera i tre caratteri 

if ( strlen($cerca) >= 3 ) { 

// ora depuriamo la stringa da cercare sul database  

$cerca =  mysql_escape_string(stripslashes($cerca));  

// ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi 

$query = "SELECT * FROM antipasti, primo, secondo WHERE tipo LIKE '%$cerca%' OR titolo LIKE '%$cerca%' OR descrizione LIKE '%$cerca%' OR ingredienti LIKE '%$cerca%' OR breve LIKE '%$cerca%' OR title LIKE '%$cerca%' OR ricerca LIKE '%$cerca%'  ";  

$risultato = mysql_query($query) or die (mysql_error());  

$risposta = mysql_query($query) or die ("Utilizza termini più specifici!"); 

$dentro_la_query= mysql_fetch_assoc($risposta); 

if ( $dentro_la_query == TRUE ) { 

while($row= mysql_fetch_assoc($risultato)) {  


$tipo = $row['tipo']; 
$foto = $row['foto']; 

$ricerca = $row['ricerca']; 


// stampiamo i nostri dati 





echo "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$foto</a><br>";  

echo "<a href=\"http://www.cites.com/testcerca_ricette.php?id=$id\"/>$ricerca</a><br>";  
echo "Descrizione Breve : $tipo<br>"; 


} 

} else { 

echo "Nessun temine alla ricerca trovato"; 

} 


} else { 

echo "Devi inserire almeno 3 caratteri"; 

} 

} else { 

echo "Non hai compilato il modulo ricerca"; 

} 

} 

?>
 
Nelle 3 tabelle (antipasti, primo e secondo) ci sarà sicuramente più di un campo con il nome TIPO...quindi sostituisci questa:
PHP:
$query = "SELECT * FROM antipasti, primo, secondo WHERE tipo LIKE '%$cerca%' OR titolo LIKE '%$cerca%' OR descrizione LIKE '%$cerca%' OR ingredienti LIKE '%$cerca%' OR breve LIKE '%$cerca%' OR title LIKE '%$cerca%' OR ricerca LIKE '%$cerca%'  ";

con questa:
PHP:
$query = "SELECT * FROM antipasti, primo, secondo WHERE antipasti.tipo LIKE '%$cerca%' OR primo.tipo LIKE '%$cerca%' OR secondo.tipo LIKE '%$cerca%' OR titolo LIKE '%$cerca%' OR descrizione LIKE '%$cerca%' OR ingredienti LIKE '%$cerca%' OR breve LIKE '%$cerca%' OR title LIKE '%$cerca%' OR ricerca LIKE '%$cerca%'  ";

Ho scritto la query pensando che il campo TIPO si trova in tutte e 3 le tabelle. Sicuramente si trova in più di una, quindi sono stato portato a pensare che si trovi in tutte. Se è così provala.



Resta il fatto che ti manca la condizione per la quale si uniscano le tabelle! Se non c'è un campo chiave primaria in una e chiave esterna nell'altra per tutte e 3 devi cambiare modo e fare 3 query separate perchè in questo modo si crea solo una moltiplicazione tra tabelle! che onestamente non serve a nulla.
 
Ultima modifica:

Discussioni simili