Avatar billede mac10 Nybegynder
09. oktober 2009 - 12:58 Der er 8 kommentarer og
1 løsning

WHERE LIKE '%word%' skal være helt præcis?

Hej,

Jeg har et søgefelt hvor den driller lidt. I min tabel har jeg en række ved navn "sizes" som indeholder komma separeret information. F.eks. "Small,Medium,Large,X-Large" osv.

Jeg har følgende kald når man søger efter størrelse:
WHERE sizes LIKE '%$size%'"

Problemet er bare at hvis jeg vælger "Large", så vælger den automatisk alt med "X-Large" også da ordet Large jo eksisterer i X-Large.

Hvordan kan man gøre det således at den kun vælger præcis det ord man søger efter i sit MySQL kald?

På forhånd tak?
Avatar billede dkfire Nybegynder
09. oktober 2009 - 13:16 #1
Du bør normalisere din database så du IKKE har felter med komma separeret værdier i.
Avatar billede mac10 Nybegynder
09. oktober 2009 - 13:30 #2
Keywords og andet godfolk skal komma separeres når det skrives ind for at gøre det universielt, og i mit tilfælde har jeg ikke andre alternativer.

Fandt dette eksempel med Regular Expressions:

SELECT *
FROM table
WHERE fieldname REGEXP '[[:<:]](word)[[:>:]]'

Synes bare ikke at det virker.
Avatar billede pi-hus Nybegynder
09. oktober 2009 - 14:30 #3
Du kan lave et lille HACK:

Ret indholdet i feltet fra
Small,Medium,Large,X-Large
til
,Small,Medium,Large,X-Large


Når så du søger, så søg efter
WHERE sizes LIKE '%,$size%'"


Men ja, som andre har skrevet, så bør der normaliseres: Læg SIZE oplysningerne over i en anden tabel, og link til den (evt flere gange hvis der findes flere størrelser af en vare).
Avatar billede mac10 Nybegynder
09. oktober 2009 - 15:17 #4
Hej pi-hus,

Plejer i normale omstændigheder også at bruge en mellemtabel til at lagre disse data. Dog er det allerede bygget på denne måde, og vil gerne lade det forblive sådan, da der er deadline på projektet, og gider ikke til at skulle lave det om til mellemtabeler og rette hele CMS.

Jeg legede også med dit hack-forslag, og fik det til at virke, men det andet ville dog være lidt bedre da det også bruges til keywords, farver osv.

Er der slet ikke nogen måde man kan komme igennem det på ved at have det stående komma separeret? Læste at REGEXP skulle kunne klare det, men synes bare ikke det virker
Avatar billede pi-hus Nybegynder
09. oktober 2009 - 15:25 #5
Du kan godt lave et RegEx, som søger på teksten, hvor der ikke må være et "-" foran.

Men hvad så hvis der søges andre steder...
Hvis der f.eks. står "web-udvikler" i teksten og søgeordet er "udvikler" - så vil det ikke blive fundet.

Tror det er farligt at sætte et RegEx ind, som aldrig vil have "-" foran søgeordet.
Avatar billede mac10 Nybegynder
09. oktober 2009 - 15:31 #6
Jeg er ikke helt inde i det med RegEx, men har nu prøvet at søge efter en exact søgning, og kan bare ikke finde det. Hvis jeg adskiller med et andet tegn en "," måske "|" vil det måske være lettere? Er begyndt at overveje ovenstående hack. Hader at bruge for lang tid på én ting :)
Avatar billede pi-hus Nybegynder
09. oktober 2009 - 15:41 #7
Har kigget lidt efter noget RegEx, og jeg har ikke lige kunnet finde noget der kunne finde det frem.

Brug hacket. Det virker (selv om det ikke er pænt).
Avatar billede mac10 Nybegynder
09. oktober 2009 - 15:47 #8
Prøver med hacket.

Men før exploded jeg den for at få vist alle størrelse på denne måde:
$arraySizes = explode(',', $productSizes);

Hvordan viser jeg dem så hvis de starter med "," fremfor at slutte med det?
Avatar billede mac10 Nybegynder
09. oktober 2009 - 16:21 #9
Har fikset det.

Tak for hjælpen pi-hus, smid venligst et 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
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