Avatar billede morten12345678 Nybegynder
20. januar 2011 - 21:41 Der er 16 kommentarer og
1 løsning

REGEXP eller LIKE

Hejsa,
Er ny på dette site så ret mig hvis jeg gør noget galt.

Jeg har brug for følgende query.
SELECT * FROM engine WHERE name REGEXP '(^test| test| test$)'
men med en LIKE da REGEXP tager 1,92 sec at udføre og LIKE '%test%' tager 0,18 sec at udføre.

Hvad gør jeg her for at udføre ovenstående REGEXP så hurtigt ?
Avatar billede DGudiksen Nybegynder
20. januar 2011 - 22:55 #1
kender ikke til regexp, men det ville da være en mærkelig regex at lave.

Først siger du jo at den skal være først i teksten:
test

hvis det ikke er opfyldt skal det være:
test

og hvis det ikke er opfyldt skal test stå til sidst i sætningen.

hvilket for mig ikke rigtigt giver nogen mening, prøv evt at forklare hvad du skal bruge det til.

mvh
Avatar billede morten12345678 Nybegynder
20. januar 2011 - 23:10 #2
Nej da, det giver da god mening.

Hvis der søges efter "test" så skal der findes:

1. "test af en ting".
2. "jeg er en test".
3. en test er en god ting".

DER SKAL IKKE FINDES:

4. "tester er en god ting".
5. "jeg har en tester".
6. "jeg tester min ting".

Bruger jeg LIKE '%test%' vil alle ovenstående 1-6 resultater blive fundet.
Avatar billede oomalkeoo Nybegynder
20. januar 2011 - 23:12 #3
Hvad med bare at gøre % test % ??
Avatar billede morten12345678 Nybegynder
20. januar 2011 - 23:13 #4
Så findes 1. og 3. ikke.....
Avatar billede morten12345678 Nybegynder
20. januar 2011 - 23:13 #5
Undskyld 1. og 2.
Avatar billede oomalkeoo Nybegynder
20. januar 2011 - 23:14 #6
læste forkert, undskyld :)
Avatar billede DGudiksen Nybegynder
20. januar 2011 - 23:16 #7
morten12345678 > undskyld det var mig som havde forstået dit spørgsmål lidt forkert :)
Avatar billede morten12345678 Nybegynder
20. januar 2011 - 23:17 #8
Jeg har netop fundet løsningen.
SELECT * FROM engine WHERE (name LIKE 'test %' OR name LIKE '% test %' OR name LIKE '% test').

og følgende med flere forskellige søgeord.

SELECT * FROM engine WHERE (name LIKE 'test %' OR name LIKE '% test %' OR name LIKE '% test') AND (name LIKE 'test2 %' OR name LIKE '% test2 %' OR name LIKE '% test2')

Osv.

Ovenstående query udføres som REGEXP`en med med LIKE hastighed.
Avatar billede oomalkeoo Nybegynder
20. januar 2011 - 23:22 #9
Hvad med SELECT * FROM `a-foodtable` WHERE `varenavn` REGEXP '[[:<:]]test[[:>:]]'
Avatar billede oomalkeoo Nybegynder
20. januar 2011 - 23:23 #10
Viser poster 0 - 3 (4 total, Forepørgsel tog 0.0163 sek)
Avatar billede oomalkeoo Nybegynder
20. januar 2011 - 23:30 #11
anyways, tror jeg vil iseng, synes umiddelbart ikke om din like, jeg ville måske bruge den jeg gav dig. Ved ikke lige  hvorfor det andet kom med lige efter.. underligt.. Sov godt.
Avatar billede morten12345678 Nybegynder
21. januar 2011 - 00:23 #12
REGEXP '[[:<:]]test[[:>:]]'

Den kender jeg ikke, Hvad gør den ?

(4 total, Forepørgsel tog 0.0163 sek)
Nu var det jo kun meningen den skulle vise 3 resultater. Hvad mener du med 4 total ? Hvilke 4 ?

og 0.0163 sek, hvor har du set fra ? har en database med 170000 rækker ? hvor mange rækker har den du har testet med ?
Avatar billede arne_v Ekspert
21. januar 2011 - 01:21 #13
Det er word boundaries.
Avatar billede arne_v Ekspert
03. marts 2011 - 03:28 #14
tid at få afsluttet her?
Avatar billede morten12345678 Nybegynder
03. marts 2011 - 13:27 #15
Jeg syntes ikke rigtigt jeg fik svar på hvad det der var.
At det hedderr word boundery er fint meb det forklarr jo ikke hvad det er og hvordan det erstatter min like sant hvilke forbedringer den giver ?

Også har jeg ikke den fjernedte ide om hvordan jeg skal lukke.
Avatar billede arne_v Ekspert
03. marts 2011 - 14:45 #16
"word boundaries" betyder det samme som det goer i almindeligt engelsk.
Avatar billede morten12345678 Nybegynder
03. marts 2011 - 15:07 #17
Tak for det - det var til en rigtig stor hjælp for mig.
Hvis jeg dog bare havde vidst at det betød det samme på dansk som drt betyder på engelsk så havde jeg jo slet ikke behøvet at spørge.....
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