Avatar billede zagger Juniormester
27. december 2007 - 11:52 Der er 9 kommentarer og
2 løsninger

Avanceret søgning i MySQL database.

Jeg er på udkig efter et PHPscript til at søge i min MySQLdatabase. Det skal kunne søge på flere ord i en sætning og så må den også gerne kunne søge specifikt, som f.eks. Google, ved at skrive i "gåseøjne".

Indtil videre har jeg prøvet denne:
http://www.eksperten.dk/spm/126466
Men når man søger på flere ord finder den alle sætninger hvor enten det ene eller det andet ord er i, og ikke kun de sætninger hvor begge ord er i.

Jeg har også prøvet denne:
http://www.eksperten.dk/spm/81387
Men på grund af min knap så store erfaring med PHP og MySQL kan jeg ikke lige gennemskue hvordan jeg får den til at virke.

Er der nogen der har et godt script og/eller kan skære det ud i pap eller slå det i beton så jeg kan forstå det?
Avatar billede sbk-eraser Nybegynder
27. december 2007 - 12:28 #1
Det du har brug for er nok dette: http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html
Ved at tilføje IN BOOLEAN MODE til din søgning, får du automatisk alle disse parametre.
Du skal dog være opmærksom på at den i Boolean mode ikke vil medtage søgninger på under 4 tegn som standard.
Din SQL forespørgsel skal være noget i stil med denne;
"SELECT * FROM tabel WHERE MATCH (kolonne1,kolonne2,kolonne3) AGAINST ('".$søgestreng."' IN BOOLEAN MODE)"

Du skal huske at bygge et full-textindex af de tabeller der skal gennemsøges, da søgningen ellers vil være enormt langsom

Håber det kan hjælpe
Avatar billede zagger Juniormester
27. december 2007 - 13:27 #2
Nu har jeg lavet dette:

CREATE FULLTEXT INDEX ft ON mintabel (tekst);
$query = mysql_query("SELECT * FROM mintabel WHERE MATCH(tekst) AGAINST ('".$seek."' IN BOOLEAN MODE)") or die(mysql_error());

if (!mysql_num_rows($query)) {
echo "Intet fundet.";
}

while($row = mysql_fetch_array($query)){
$sql = "SELECT * FROM mintabel WHERE tekst = '$row[tekst]'";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

echo "$row[tekst]<br/><br/>";
}

Jeg får følgende fejl:
The used table type doesn't support FULLTEXT indexes

Men tabellen er sat som text i MySQL, så den skulle jo understøtte FULLTEXT indeksering.
Avatar billede zagger Juniormester
27. december 2007 - 15:13 #3
Har læst lidt nærmere om FULLTEXT INDEX. Jeg troede at det var noget der skulle laves før hver søgning, men nu har jeg forstået at det er et index som kun skal laves én gang og så løbende opdateres.

Så nu vil jeg gerne vide hvordan jeg laver sådan et index? Har læst lidt frem og tilbage, men forstår ikke helt hvordan jeg helt nøjagtig skal gøre.
Avatar billede sbk-eraser Nybegynder
27. december 2007 - 17:11 #4
bruger du phpmyadmin ?
Avatar billede zagger Juniormester
27. december 2007 - 19:28 #5
Jep.
Avatar billede sbk-eraser Nybegynder
27. december 2007 - 19:42 #6
Den lille blå knap i toppen til højre på dette billede, klik på den, så bliver der bygget et full textindex;
http://www.netref.fr/im/technique/TABLE_NR5.04_SITE.png
Avatar billede sbk-eraser Nybegynder
27. december 2007 - 19:43 #7
det skal gøres ved alle kolonner der skal søges i.
Avatar billede zagger Juniormester
27. december 2007 - 22:17 #8
Den knap kan der ikke trykkes på ved nogen af mine kolonner. :(
Kan det tænkes at jeg har gjort noget forkert da jeg lavede tabellen?
Avatar billede sbk-eraser Nybegynder
28. december 2007 - 01:45 #9
Det kan komme an på hvilken datatype kolonnen indeholder, og hvilket characterset din database kører.
VARCHAR kolonner burde kunne indekseres som FULL-TEXT, såfremt de er UTF-8
Avatar billede zagger Juniormester
28. december 2007 - 12:39 #10
Jeg har nu ændret datatypen til UTF-8. Men det er stadig det samme.
Avatar billede zagger Juniormester
02. januar 2008 - 15:57 #11
Jeg fik det ikke til at virke, men du får lidt point alligevel som tak for hjælpen.
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