semplice motore di ricerca... ma non troppo!

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Salve a tutti,

sto cercando di creare un semplice motore di ricerca interno per il mio sito. Quello che sono riuscito a fare finora però è un po' troppo semplice e presenta un po' di problemi...
Cliccando sul pulsante 'cerca' si viene indirizzati alla pagina cerca.php (di cui riporto il codice qui sotto).
La ricerca serve per trovare delle 'schede' costituite da un'immagine, un titolo e una descrizione. Vorrei che se vengono scritte una o più parole presenti nel titolo o nella descrizione le schede interessate siano presenti nei risultati, possibilmente in ordine di rilevanza.

- Il problema principale è che se scrivo ad esempio due parole, separate da spazio, ed entrambe le parole compaiono nello stesso record, quel record me lo scriverà due volte...
- non riesco a limitare la ricerca con LIMIT. Se scrivessi una parola che è presente in tutti i risultati per assurdo, mi scrive tutti i risultati, fregandosene del LIMIT. Tanto meno riesco a dare una rilevanza accettabile usando ORDER BY e LIKE.
- non riesco a far accettare i caratteri accentati tra i caratteri ammessi nella ricerca.
- mi fermo qui anche se potrei andare avanti con l'elenco....

Se qualcuno ha voglia e tempo di darmi qualche suggerimento ne sarei davvero molto grato!!
Sarei disposto anche a rifarlo tutto da capo, ma con un senso però, perché così com'è proprio non va.... :(

PHP:
if ($_POST['search']){
if (!empty($_POST['keywords'])) {
$searchStr = $_POST['keywords'];
if (ereg("^[0-9a-zA-Zà-ù,&,'.' ]+$", $searchStr)) {

require ("db/db.php");

print "<div class='risultati'>Risultati della ricerca per \"<b>$searchStr</b>\":</div><br>";
$keys = explode(" ", $searchStr);

for ($x = 0; $x < count($keys); $x++) {
$querystr = "SELECT img,link,numclick,descrizione,ordine FROM totale_tabelle WHERE descrizione = \"$keys[$x]\" OR descrizione LIKE \"%$keys[$x]%\" OR ordine = \"$keys[$x]\" OR ordine LIKE \"%$keys[$x]%\"";

$result = mysql_query($querystr);
if ($frow = mysql_fetch_array($result)) {
$found = true;
do { 

$words = $frow["descrizione"];
$boldwords = str_replace($searchStr,"<b>".$searchStr."</b>",$words);

echo "<div class='grid_8'><div class='screen'>".$frow["img"]."</div><div class='text'><h2>".$frow["link"]."<span class='visite'> &nbsp;- ".$frow["numclick"]." visite</span></h2>".$boldwords."</div></div>"."<br>";
} while ($frow = mysql_fetch_array($result));
}

}
if (!$found) {
print("<div class='risultati'><b>Nessun risultato correlato alla ricerca è stato trovato.</b></div><br>");
}

}
else {
print("<div class='risultati'><br><b>La tua stringa di ricerca contiene caratteri non ammessi.</b></div><br>");
}
}
else {
print("<div class='risultati'><br><b>Devi inserire almeno una parola chiave per effettuare la ricerca.</b></div><br>");
}
}
 

lotus

Utente Attivo
5 Mag 2009
543
8
0
Ciao, per il primo problema puoi usare DISTINCT con SQL in modo da non riptere i risultati.
Tuttavia, ti suggerisco di rivedere a monte la progettazione dello strumento di ricerca.

E' davvero necessario fare query su tutto? Non è possibile creare una tabella indice con le keyword principali e ricercare solo su queste?

Ci sono requisiti specifici?

Ciao, Ciro
 

davide1982

Nuovo Utente
14 Giu 2010
26
0
0
Dunque, diciamo che i problemi principali gli ho risolti così:

PHP:
$querystr = "SELECT img,link,numclick,descrizione,ordine FROM totale_tabelle WHERE 1=1 ";
for ($x = 0; $x < count($keys); $x++) {
   $querystr .= "and concat( descrizione, ordine ) like \"%$keys[$x]%\"";
}
$querystr .= " limit 20";
$result = mysql_query($querystr);

In questo modo non mi duplica più i risultati e riesco a limitarne il numero con LIMIT.


Ho notato però che non ha molto senso il modo in cui metto in bold, nei risultati di ricerca, le parole chiave cercate:

$words = $frow["descrizione"];
$boldwords = str_replace($searchStr,"<b>".$searchStr."</b>",$words);

Pensavo di aver risolto in modo furbo, ma così mi mette in bold solo quello che è esattamente uguale alla stringa di ricerca. Quindi, per fare un esempio, se cerco le parole "macchine usate", mi restituisce bold per "macchine usate", ma non bold per "macchine" o "usate" da soli.... C'è una soluzione migliore di quella che ho attualmente?
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [PHP] cambiare gli if in un url semplice PHP 1
L [PHP] convertire gli url ad forma semplice PHP 3
G Caricare una semplice Jpg con il PHP PHP 1
Federico.Marcelo qual è il modo più semplice per creare file GIF di alta qualità? Webdesign e Grafica 4
V Semplice barra di ricerca con filtro categorie prodotti E-Commerce 0
Z Semplice area privata in php PHP 6
M Un semplice saluto Presentati al Forum 1
T Visualizzare un Xml su un sito in modo semplice XML 1
X [Photoshop] Cercasi strumento per ottenere un semplice effetto. Photoshop 6
J [PHP] sviluppare una semplice calcolatrice PHP 1
booklisa [PHP] Domanda semplice (apparantemente) PHP 4
R [PHP] Semplice form PHP 4
G [CERCO][Retribuito] Programmatore Windows per un semplice software Offerte e Richieste di Lavoro e/o Collaborazione 0
MarcoGrazia Costruire una semplice chat in PHP non è affatto semplice. PHP 3
G aiuto per semplice menu onclick HTML e CSS 6
T Problema Semplice Script Javascript 1
Mr. Alex D. Creazione semplice autorisponditore con redirect PHP 1
steak Casella di ricerca completa, invece di semplice ricerca tra tag HTML e CSS 0
A Semplice applicazione con le facebook api PHP 1
Pi3tro [Richiesta]Semplice form PHP 6
R galleria immagini semplice a schermo intero jQuery 1
C Creare semplice timer in Visual Basic Visual Basic 0
Trapano Galleria immagini semplice PHP 5
S problema con ajax semplice login script Javascript 8
L [Java] Consigli progettuali per una semplice applicazione Java 6
Trapano query semplice? PHP 21
M Semplice pagina per inserire/leggere dati su database PHP 5
E semplice ciclo if!??!?!? :dipser: MS Access 0
L login semplice con array PHP 10
L Semplice giochino javascript Javascript 20
N Menu verticale semplice stile Yahoo WordPress 2
A una guida semplice in php PHP 2
L guida semplice per imparare jquery jQuery 5
A problema con un semplice form per un loggin in php PHP 2
D Redirect: come mai non funziona un semplice redirect? Apache 0
N Semplice timer Snippet PHP 0
P inizio con il php ... semplice aiuto!! PHP 12
L Semplice esercizio funzioni JavaScript Javascript 5
borgo italia phishing o malware o semplice truffa? Discussioni Varie 0
P Galleria immagini semplice Javascript 5
Web Designer Semplice Tutorial Photoshop Effetto Fantasma Photoshop 1
ste80 Problemuccio con semplice guestbook PHP 4
S semplice query che non funziona :( PHP 3
criric Semplice calendario Snippet PHP 0
S semplice link che però non compare dentro ad un DIV HTML e CSS 3
L aiuto per questa semplice regex PHP 5
S Semplice domanda con Javascript Javascript 3
M Semplice sito php/mysql...è veramente semplice ? PHP 5
neo996sps [codeingniter]: realizzare un semplice menu PHP 1

Discussioni simili