Avatar billede darkdruid Nybegynder
12. januar 2009 - 02:40 Der er 5 kommentarer og
2 løsninger

Mindre problem i søge funktion

Ohøj kære eksperter.

Jeg er igang med at teste min lille søge funktion igennem og er nu løbet ind i et mindre problem.
I min databasetabel har jeg et indlæg hvori teksten "hygge hejsa" finder sted. Når jeg søger på "hygge hejsa" finder den indlægget, men når jeg søger på "hejsa hygge" finder den ikke indlægget.

Min kode ser således ud:
<?
echo "<h2>Søgning</h2>";
if(isset($_POST["ord"])) { $ord = $_POST["ord"]; } else { $ord = $_GET["ord"]; }
if(!$ord) {
    echo "<p>Du har ikke indtastet et søgeord...</p>";
}
else {
    $resultat = mysql_query("SELECT *,date_format(dato, '%d/%m %Y - %H:%i') as dato FROM blog_indlaeg WHERE skjult='0' AND (emne LIKE '%".$ord."%' OR indhold LIKE '%".$ord."%') order by blog_id desc") or die(mysql_error());
    if(mysql_num_rows($resultat) < 0 ) {
        echo "<p>Der blev desværre ikke fundet nogen resultater på din søgning...</p>";
    } else {
        $num = mysql_num_rows($resultat);
        echo "<div class=\"kat\"><p>Der blev fundet ".$num." blog indlæg der indeholder teksten \"".$ord."\".</p><ul>";
        while($r = mysql_fetch_array($resultat)) {
            $blog_id = $r["blog_id"];
            $emne = $r["emne"];
            $dato = $r["dato"];
            $kategori_id = $r["kategori"];
            $hentkom = mysql_query("select COUNT(kom_id) from blog_kommentarer where blog_id='".$blog_id."'");
            $antalkommentarer = mysql_result($hentkom,0,0);
            $hentkat = mysql_query("SELECT * FROM blog_kategorier WHERE kat_id='".$kategori_id."'");
            $k = mysql_fetch_array($hentkat);
            $kategori = $k["kat_navn"];
            echo "<li><a href=\"?x=blog&amp;id=".$blog_id."\">".$emne."<br /><span>".$dato." | ".$antalkommentarer." Kommentarer | Gemt i kategorien ".$kategori."</span></a></li>";
        }
        echo "</ul></div>";
    }
}
?>

Jeg har forsøgt at rode lidt rundt med min mysql_query, men det gav desværre ikke noget brugbart resultat. Jeg tror næsten det er i den der skal ændres/tilføjes lidt i, men jeg er ikke helt sikker.

Jeg håber nogen kan pege mig i den rigtige retning af en løsning på mit lille problem :)
Avatar billede darkdruid Nybegynder
12. januar 2009 - 02:59 #1
Hovsa, jeg fandt lige selv en lille fejl. Min if(mysql_num_rows($resultat) < 0 ) skulle lige ændres til if(mysql_num_rows($resultat) == 0 ).
Denne fejl har dog ikke noget med mit problem at gøre. Jeg ville blot nævne det så folk slipper for at rette på mig ;)

Jeg søger stadig en løsning på mit problem.
Avatar billede jensgram Nybegynder
12. januar 2009 - 09:06 #2
At teksten "hygge hejsa" findes, betyder ikke, at "hejsa hygge" findes.

Hvis du er ude efter, at begge (alle?) ord skal findes, men ikke nødvendigvis i den rækkefølge, skal du først bryde søgetermen op ved mellemrum og derefter lave en query á la:

... WHERE indhold LIKE '%ord1%' OR indhold LIKE '%ord2%' ... OR indhold LIKE '%ordN%' ...

evt. med AND isf. OR, hvis alle ord SKAL indgå.

Kig evt. på REGEXP ( http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp ) i stedet for LIKE.
Avatar billede jensgram Nybegynder
12. januar 2009 - 09:07 #3
Med REGEXP kunne du:

... WHERE indhold REGEXP '(ord1|ord2...|ordN)' ...
Avatar billede majbom Novice
12. januar 2009 - 09:19 #4
det er jo klart at den ikke finder "hejsa hygge" for det står der ingen steder.

$ord_array = explode(" ", $ord); //laver din streng til et array med alle søgeordene
$soege_streng = "indhold LIKE \"%".implode("%\" AND indhold LIKE \"%",$ord_arr)."%\"";

og så bruge $soege_streng i din query i stedet for:

indhold LIKE '%".$ord."%'

det samme kan su så gøre med emnet

men så finder den kun hvor emnet indeholder alle de ord der indtastes i søgefeltet, hvis du bruger:

$soege_streng = "indhold LIKE \"%".implode("%\" OR indhold LIKE \"%",$sog_arr)."%\"";

vil den finde alle dem hvor bare ét af ordene findes...
Avatar billede darkdruid Nybegynder
12. januar 2009 - 10:48 #5
Hmm, det er først nu jeg kan se et problem i den "funktion" jeg har efterspurgt. Der vil komme alt for mange resultater frem når man søger på nogle simple ting eller sætninger. Jeg tror jeg holder min søge funktion som den er nu.
Jeg vil dog lege lidt med begge forslag på et senere tidspunkt for at teste hvilke muligheder jeg har med dem.

Hvis i begge lige smider et svar så lukker jeg tråden for nu.
Avatar billede jensgram Nybegynder
12. januar 2009 - 11:18 #6
!
Avatar billede majbom Novice
12. januar 2009 - 13:04 #7
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester