hade för några veckor sedan lite frågor om hur man bygger en sökmotor. Min sökmotor är nu helt komplett förutom att det bara går att söka på ett enda ord.
Sökformuläret finns i search.php och skickar en söksträng till result.php så här:
mysql_connect("127.0.0.1", "rot", "rot");
mysql_select_db("big_db");
$resultat = mysql_query("SELECT bla bla bla FROM bla bla WHERE keyword LIKE '%$key%'");
Problemet är att om användaren skriver in "el gitarr" som söksträng hittas ingenting, men om han skriver "el" eller "gitarr" eller "elgitarr" så hittas filen "elgitarr".
Det jag tänkt göra är alltså att separera söksträngen vid varje mellanslag med split(). Men split lägger väl resultatet i en array? Hur ska jag då gå till väga för att ändra min mysql_query så att den kan söka på alla orden i arrayen var för sig i ett svep? Kodförslag mottages tacksamt!!!
Som du säger får du en array med sökord om du använder split() ( Använd hellre explode(), den är snabbare ). Men det är ju inget hinder, du får då bygga upp frågan dynamiskt:
Så här ser koden jag fick ut efter att jag försökt implementera den:
$searchKey = str_replace("*", "%", $key);
$sqlQueryStart = "SELECT namn, id FROM rec_db WHERE";
$sqlQueryEnd = "";
mysql_connect("127.0.0.1", "rot", "rot");
mysql_select_db("rec_db");
if(strstr(trim($_POST['key']), ' '))
{
$searchArray = explode(' ', trim($_POST['key']));
foreach($searchArray as $searchKey)
{
($sqlQueryEnd != "") ? $sqlQueryEnd .= " OR" : $sqlQueryEnd = "";
$sqlQueryEnd .= " namn LIKE '%" . $searchKey . "%'";
}
}
else
{
$sqlQueryEnd .= " namn LIKE '%" . $searchKey . "%'";
}
$sqlQueryEnd .= " ORDER BY namn ASC";
$result = mysql_query($sqlQueryStart . $sqlQueryEnd);
mysql_close();
Dock fungerar allt precis som förut, skriver användaren in ett enda ord går det bra, skriver användaren flera ord hittas ingenting. Vad gör jag för fel, blir frustrerad!!!
Först görs en koll om användaren söker på fler än ett ord, alltså om det finns något mellanslag i texten. Finns det det, så sprängs strängen vid alla mellanslag till en array med alla sökorden. :)
$searchKey = str_replace("*", "%", $key);
Den här raden kan du helt ta bort, den gör ingen nytta.
Om du skriver ut din SQL-fråga innan du kör den i mysql_query(), vad skrivs ut?
$sqlQueryEnd .= " ORDER BY namn ASC";
die( $sqlQueryStart . $sqlQueryEnd ); // Det här lägger du till
$result = mysql_query($sqlQueryStart . $sqlQueryEnd);
mysql_close();