- Home
- Categorie
- Coding e Sistemistica
- PHP
- Semplice Motore di Ricerca su database SQL
-
Semplice Motore di Ricerca su database SQL
Ciao a tutti.
Volevo chidere se qulacuno mi sa consigliare una guida o un tutorial per creare un semplice script in PHP motore di ricerca per parole chiave da aggiungere al mio sito che è collegato ad un database con una tabella articoli.
La ricerca volevo farla solo sulla tabella articoli; in pratica un semplice form dove io inserisco una parola da cercare nella tabella articoli e se c'è corrispondenza mi stampa l'articolo o gli articoli interessati in una tabella come risultato.
Grazie mille per i consigli
-
In pratica ho scritto questo form cerca.php:
<form action="elabora_ricerca.php" method="get"> <input type="text" name="parola"><br> <input type="submit" value="Search"> </form>
L'altro file che ho chiamato elabora_ricerca.php dovrebbe prendere la parola immessa sul campo text del form con name="parola" ed effettuare una ricerca sulla tabella articoli.
Ho provato a scrivere una query direttamente ma SQL mi ritorna che trova zero righe:
$query = "SELECT * FROM articoli WHERE MATCH(art_articolo, art_titolo, art_articolo) AGAINST ('montagna')";
La query contiene la parola "montagna" che è presente nell'articolo in tabella ma mi non restituisce risultati. Qualche consiglio sulla query?
La tabella l'ho modificata aggiungendo l'attributo FULLTEXT all'articolo.
-
Dopo aver creato gli indici fulltext devi eseguire un repair table (con phpmyadmin è facile da fare)
-
grazie per il consiglio. Ho fatto come hai detto ma mi restituisce sempre lo stesso risultato:
***MySQL ha restituito un insieme vuoto (i.e. zero righe). ***:x
Non capisco il motivo. La sintassi della query è giusta perchè altrimenti mi darebbe errore. Ma non riesce a leggere dentro al testo articolo e dare il risultato.
-
Allora ho scritto questo codice nel form:
<form action="elabora_ricerca.php" method="post"> <input type="text" name="keyword"> <input type="submit" value="Search!"> </form> ```. Poi nella pagina elabora_ricerca ho scritto quest'altro codice:
<?php
$keyword = $_POST['keyword'];$sql = "SELECT art_id, art_titolo FROM articoli WHERE MATCH (art_autore, art_titolo) AGAINST ('$keyword')";
$query = mysql_query($sql) or die (mysql_error());if(mysql_num_rows($query) > 0){
while ($riga = mysql_fetch_array($query)) {
$autore = $row['art_autore'];
$titolo = $row['art_titolo'];echo $autore; echo $titolo;
}
} else {
echo "Errore";
}
?>Però non ho ottenuto i risultati sperati. :x Cioè non mi compare niente a video. Qualcuno può aiutarmi per favore? Grazie mille
-
Ho provato a riscrivere il codice ma mi da errore nella riga ```
$query = mysql_query($sql) or die(mysql_error());Questo è il nuovo codice:
<?php
$keyword = $_POST['keyword'];$sql = mysql_query("SELECT *, MATCH(art_titolo, art_articolo) AGAINST ('$keyword') AS score from articoli WHERE MATCH (art_titolo, art_articolo) AGAINST('$keyword') order by score desc");
$query = mysql_query($sql) or die(mysql_error());
$row_sql = mysql_fetch_array($query);
$total = mysql_num_rows($query);if($total>0) {
while ($row_sql = mysql_fetch_array($query)) {//echo out the results
echo ''.$row_sql['art_titolo'].'<br />'.$row_sql['art_articolo'].'';
}
} else
{
echo "No results to display";
}
?>Mi segnala: **Warning**: mysql_query() expects parameter 1 to be string, resource given in **C:\Documents and Settings**..... Come posso risolvere?
-
Sistemato. Adesso però mi visualizza solo il primo risultato della query, quello con id più basso. Il codice è questo:
<?php $keyword = $_POST['keyword']; $sql = "SELECT *, MATCH(art_titolo, art_articolo) AGAINST ('$keyword') AS score from articoli WHERE MATCH (art_titolo, art_articolo) AGAINST('$keyword') order by score desc"; $query = mysql_query($sql) or die(mysql_error()); $riga = mysql_fetch_array($query); $righe = mysql_num_rows($query); if($righe>0) { echo ("<br/><h2>Search results:</h2>"); while ($riga = mysql_fetch_array($query)) { echo ("<h3>{$riga['art_titolo']} ({$riga['score']})</h3>{$riga['art_articolo']}<br/><br/>"); } } else { echo "Nessun risultato"; } ?>
Qualche consiglio?
-
la query funziona solo se metto boolean mode in questo modo. però mi fa vedere sempre solo un risultato:
SELECT *, MATCH(art_titolo, art_articolo) AGAINST ('$keyword') AS score from articoli WHERE MATCH (art_titolo, art_articolo) AGAINST('$keyword' IN BOOLEAN MODE) order by score desc
Consigli?
-
Ok. Risolto il problema. I record contenenti la parola cercata devono essere meno della metà del totale altrimenti ritornerà risultato zero.
Qualcuno mi sa consigliare qualcosa per ovviare a questa mancanza?
Grazie mille