Avatar billede hkb-x Nybegynder
24. august 2007 - 16:31 Der er 15 kommentarer og
1 løsning

søg kun på hele ord

selct * from tabel where tekst like '%AGF%'

Såddan søger jeg i tekst nu men det giver nogle gange nogle gange får jeg nogle mærkelige ting ud der intet har med søningen at gøre. Men når jeg så undersøger så er det fordi der f.eks. står bagfra (hvor bogstaverne agf indgår)...

Så mit spørgsmål er hvordan jeg får MySQL til kun at søge i hele ord?
Avatar billede liit42 Nybegynder
24. august 2007 - 17:44 #1
SELECT * FROM table WHERE MATCH (tekst) AGAINST 'AGF';

Det kræver dog at col'en tekst er FULLTEXT - se http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html for mere info

FULLTEXT ved CREATE TABLE:
mysql> CREATE TABLE articles (
    ->  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->  title VARCHAR(200),
    ->  body TEXT,
    ->  FULLTEXT (title,body)
    -> );

FULLTEXT hvis du allerede har lavet din table:
mysql> ALTER TABLE ADD FULLTEXT (tekst)
Avatar billede w13 Novice
24. august 2007 - 17:47 #2
Alternativt kan du vel sige:

select * from tabel where tekst like '%AGF %' or tekst like '% AGF%' or tekst = 'AGF'
Avatar billede thesurfer Nybegynder
24. august 2007 - 17:53 #3
w13> Hmm.. tror jeg ikke.. ikke med OR..

Så vil den jo også returnere "Hej muhahaAGF med dig" da strengen jo overholder: %AGF %

Eller tager jeg fejl..?
Avatar billede liit42 Nybegynder
24. august 2007 - 18:08 #4
thesurfer har ret - det ville gå galt.. Det er derfor vi har MATCH AGAINST :-)

(og det første var ment som et svar - jeg er bare ny her)
Avatar billede w13 Novice
24. august 2007 - 18:44 #5
Ja, det er selvfølgelig rigtigt.. Og surt. :) Så bliver det match against..
Avatar billede thesurfer Nybegynder
24. august 2007 - 18:56 #6
Jeg har læst meget lidt om MATCH AGAINST, og en konklusion baseret på eksemplet på http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html ville være, at mellemrum (" ") er delimeteren, dvs., separatoren mellem søgeord..

Det svarer til at man f.eks. bruger % AGF %..

Så et alternativ vil nok være noget i stil med:

where tekst like 'AGF %' or tekst like '% AGF %' or tekst like '% AGF' or tekst like 'AGF'

Da der kun var et enkelt eksempel med en søgning på et ord, lagde jeg ikke mærke til andre delimetere, som MATCH AGAINST måtte have..

Så, hvis det kun er " ", vil den ikke returnere "OB,AGF,AAB,osv", da der ikke er mellemrum omkring "AGF"..


Men jeg er ret sikker på, at der er andre delimeters.. :-)
Avatar billede w13 Novice
24. august 2007 - 19:02 #7
Den vil heller ikke returne "AGF.", "AGF!" eller "AGF?" i så tilfælde =S
Avatar billede thesurfer Nybegynder
24. august 2007 - 19:19 #8
w13> Korrekt, Sherlock Holmes.. ;-)
Avatar billede liit42 Nybegynder
24. august 2007 - 19:20 #9
MATCH AGAINST bruger ikke kun ' ' - '.' ',' '+' og '-' tæller i hvert fald også - har lige testet

så fx "FOO+AGF." vile blive returneret :-)
Avatar billede w13 Novice
24. august 2007 - 19:24 #10
Elementært.. =)
Avatar billede arne_v Ekspert
25. august 2007 - 03:30 #11
Hvis full text kan bruges så er det nok den bedste løsning.

Alternativet må være REGEXP a la:

SELECT * FRPM tabel WHERE felt REGEXP '(^|[ ,.;])ord([ ,.;]|$)';
Avatar billede liit42 Nybegynder
25. august 2007 - 13:26 #12
Ja, med REGEXP vil du selv kunne angive hvilke tegn du vil bruge som delimeter, men til dagligdags brug vil jeg ikke mene det er nødvendigt (og antager at REGEXP er langsommere). Og så skal du ikke igang med at tænke over hvilke tegn der skal med, som !"/()'+-: fx


Men nu har du nogle forslag at rode rundt med :-)
Avatar billede nielle Nybegynder
25. august 2007 - 22:09 #13
Hvorfor ikke denne RegExp så?

SELECT * FRPM tabel WHERE felt REGEXP '\bord\b';
Avatar billede arne_v Ekspert
25. august 2007 - 22:38 #14
Hvis \b bruger de delimiters man ønsker at bruge og MySQL understøtter \b, så er det
en pænere løsning.
Avatar billede hkb-x Nybegynder
29. august 2007 - 16:43 #15
jeg har brugt thesurfer's eksempel:

where tekst like 'AGF %' or tekst like '% AGF %' or tekst like '% AGF' or tekst like 'AGF'

og det gav præcis hvad jeg ville have så skriv svar for point...
Avatar billede thesurfer Nybegynder
29. august 2007 - 19:42 #16
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
Computerworld tilbyder specialiserede kurser i database-management

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