Avatar billede Mik2000 Professor
24. august 2006 - 22:32 Der er 9 kommentarer og
1 løsning

SQL sætning

Hej

Jeg har en tekst i en database som f.eks. kunne se sådan ud:
Computeren er meget spændende pga det flotte design. Det er også det flotte design der gør den til den klare nr 1. Producentens hjemmeside er også nem at hente drivere fra, da de har et flot enkelt webdesign.

I denne ønsker jeg at søge efter design via SQL.

Hvis jeg skriver:

tekst LIKE '%design%'
... så får jeg alle steder med design også ord der indeholder ordet f.eks. webdesign

tekst LIKE '% design %'
... så skal der være et mellemrum på hver side og den finder det dermed ikke når der er . , eller andre tegn (f.eks. HTML) efter. Det samme gælder hvis man kun laver mellemrummet det ene sted

tekst = design
... så får man ingenting da der er mere end blot ordet i teksten

Så mit spørgsmål er:
Hvad skriver jeg for kun at få de steder hvor design står som et selvstændigt ord, men samtidige også få de steder hvor der er tegn foran/bagved, og er dette overhovedet muligt?
Avatar billede erikjacobsen Ekspert
24. august 2006 - 22:38 #1
Avatar billede Mik2000 Professor
25. august 2006 - 00:12 #2
Hej

Ikke helt med ud fra linket hvordan jeg skal bruge det her.
Avatar billede coderdk Praktikant
25. august 2006 - 02:12 #3
SELECT * FROM dintabel WHERE tekst REGEXP '(^| )design( |$)';
Avatar billede coderdk Praktikant
25. august 2006 - 02:17 #4
Denne er måske lidt bedre:

SELECT * FROM dintabel WHERE tekst REGEXP '[[:<:]]design[[:>:]]';

[[:<:]] og [[:>:]] er word boundaries...
Avatar billede Mik2000 Professor
25. august 2006 - 18:23 #5
Hej

Selve SQL sætningen virker som den skal.

Næste problem er at søgeordet ligger i en variabel kaldet $sog (PHP)

Hvis jeg forsøger at indsætte den sådan her:
SELECT * FROM dintabel WHERE tekst REGEXP '[[:<:]]$sog[[:>:]]';
... så skriver den
Parse error: syntax error, unexpected '[', expecting T_STRING or T_VARIABLE or T_NUM_STRING in STIEN_TIL_FILEN on line 30

Kan det løses :)
coderdk - Hvis du kan så er pointene på vej for den fandt de rigtige resultater hvis jeg blot skrev ordet :)
Avatar billede coderdk Praktikant
25. august 2006 - 21:32 #6
$sql = "SELECT * FROM dintabel WHERE tekst REGEXP '[[:<:]]" . $sog ."[[:>:]]'";
Avatar billede Mik2000 Professor
25. august 2006 - 23:19 #7
Hej

Tak for det.

Så lige en sidste ting - kun hvis det kan rettes ;)

Søger man f.eks. på ris, så tager den de steder med hvor der står f.eks.:
jordb&aelig;ris (jordbæris)
Er det muligt at fortælle den at den ikke skal gøre det når det er æ, ø og å tegnene der står lige inden?

Ps. Du har point uanset hvad :)
Avatar billede Mik2000 Professor
25. august 2006 - 23:23 #8
Og for at gøre det ekstra svært. Kan man lave så den også kan finde ud af at søge på ord med æ, ø og å.

Som det er nu skriver den at den finder 0 hvis man søger på f.eks. gær. Og den finder dem kun hvis man søger på g&aelig;r

Hvis du kan løse dette også, sammen med det beskrevet ovenover, så er der 100 point ekstra :)
Avatar billede coderdk Praktikant
26. august 2006 - 00:26 #9
Det kan du godt, men så skal du ikke gemme æøå som HTML-entities ;)

Du kan prøve om denne virker tilfredsstillende:

$sql = "SELECT * FROM dintabel WHERE tekst REGEXP '[^;][[:<:]]" . $sog ."[[:>:]]'";
Avatar billede Mik2000 Professor
26. august 2006 - 14:35 #10
Hej Coderdk

Tak for den store hjælp. Nu kører det :)

Gå ind på http://www.eksperten.dk/spm/728502
her er 100 point ekstra som lovet og et lille bitte tillægsspørgsmål som du kan svare på hvis du vil ;)
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