25. juli 2006 - 13:49Der er
6 kommentarer og 1 løsning
Søgning på flere ord mysql/php
Jeg har lavet følgende script til søgninger i min databasen: Database ser således ud:
annonce ------- id tekst overskrift
soeg.php ------- <? if($_POST["soeg"]){ $search = $_REQUEST["search"]; $hent = mysql_query("SELECT * FROM annonce where tekst LIKE '%$search%' OR overskrift LIKE '%$search%'")or die(mysql_error()); while ($hent_row = mysql_fetch_array($hent)){ echo $hent_row["overskrift"]; } } ?>
Det fungerer rigtig godt, så længe at jeg kun søger på et ord. Når jeg søger på flere ord, skal det stemme præcis med hvordan ordene står i databasen.
eks: Hvis vi har en værdi i basen der er "Super flot cykel".
Nu vil jeg ved søgning på "flot cykel" få det ønskede resultat. Ved en søgning på "Super cykel" vil jeg dog ikke få noget resultat.
Hvordan løser jeg dette problem? Jeg synes at kunne huske at man i nogle systemer laver en word_list som man så søger i. Synes bare det virker meget omfattende at skulle dele alt tekst op i enkelte ord. (Kan selvfølgelig gøres automatisk, men vil stadig kræve nogle krafter)
explode deler din streng ($search). I dette tilfælde på mellemrum (" ") og smider det hele i et array. Derefter løber den arrayet igennem og laver en ny LIKE for hvert ord.
Det ser ret fornuftigt ud! :) Smart. Jeg ønsker at alle ordene i søgestrengen skal indgå, og ikke bare et af dem. Jeg har blot ændre de to første OR -> AND. Så det ser således ud (Håber ikke der skulle være noget galt i det):
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.