Så er du kommet det rette sted hen... :-) Jeg gætter på at du sikkert idag bruger en
select * from din-tabel where tekstfelt1 like \'%søgetekst%\' or tekstfelt2 like \'%søgetekst%\' or tekstfelt3 like \'%søgetekst%\' osv...
ikke?
Det du gør er følgende:
1) Opret et fulltext indeks med følgende kommando:
CREATE FULLTEXT INDEX ft ON din-tabel (tekstfelt1, tekstfelt2, tekstfelt3);
Du skal medtage alle de tekstfelter, som du ønsker at kunne søge i. Kun felter af type TEXT eller VARCHAR kan medtages - altså *ikke* CHAR.
2) Søg i tabellen med følgende sætning:
SELECT * FROM din-tabel WHERE MATCH(tekstfelt1, tekstfelt2, tekstfelt3) AGAINST (\'et eller flere søgeord\');
Hvis der angives flere søgeord (skal adskilles med mellemrum) laves automatisk en \"or\" sammenligning. I en senere version af MySQL får man mulighed for at vælge mellem \"and\" og \"or\".
I MATCH parantesen *skal* du medtage alle de tekstfelter, som du specificerede i din CREATE INDEX.
$sogtemp = explode(\" \", $author); $samlet = count($sogtemp); $q= \"SELECT authorid FROM author WHERE\"; for ($i = 0; $i < $samlet; ++$i) { if ($last) $q .= \" or \"; $q .= \" name LIKE \'%$sogtemp [$i]%\'\"; $last = \"1\"; } Vil det stadig kunne hjælpe ?
Hvis du bruger \"LIKE \'%etellerandet%\'\" så kan du ikke bruge nogen form for indeks. Det betyder at MySql skal læse *alle* records i tabellen igennem for at finde dem der passer.
FULLTEXT indekset opretter en ord-liste, som der så kan søges i meget hurtigt. Fra denne ordliste er der så direkte \"pegepinde\" til de records, som indeholder ordet. Samtidig bliver resultatet automatisk sorteret således at de records, som indeholder ordet flere gange, ligger først.
hvad er det korteste ord man kan søge på den måde.. hvis jeg for eksempel søger på \"vi\" fra et felt der indeholder \"Vi kan nu stolt fremvise vores seneste produktion\" finder den det ikke.. heller ikke selvom jeg skriver \"Vi\"..
Er der en mindste grænse på længden af søgeord..? Er det casesensitive..? Hvad hvis det kun er en del af et ord man søger på..?
delwin -> Der er en mindste grænse på 4 bogstaver - dvs. alle ord på tre tegn eller mindere bruges ikke. Denne grænse kan kun ændres ved at kompilere MySQL på ny.
sark -> Du skal bruge version 2.23.xx for at kunne bruge FULLTEXT indeks. Der er lige udsendt en ny version 2.23.39 - hent den.
delwin -> den er case insensitive og kan også finde ud af danske tegn.
Synes godt om
Ny brugerNybegynder
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.