Avatar billede thb Nybegynder
22. december 2010 - 04:31 Der er 9 kommentarer

Søge efter tal i komma liste

Hej,

Jeg forsøger at lave en sql query hvor der bliver søgt efter et tal i komma liste...

Altså i db'en er der et felt som hedder madeby, og her kan stå alt fra ingen til et tal (f.eks. 5) til mange tal (f.eks 5,10,45,100).

Nu vælger folk så noget i en liste, og det kan være flere forskellige tal og de skal så smide ind i en query.

jeg looper folks valg igennem og laver min query med :

"(madeby LIKE '%" . $array[$i] . "%') AND "

Det virker som sådan også meget godt, men problemet er hvis der er et felt som står til 30,40,100 og folk vælger nummer 1, så kommer det felt med fordi der står 1 i 100.

Hvordan kommer jeg uden om den her... Jeg vil helst uden om at skulle rette mit felt til... Jeg har kigget på noget med REGEXP, men kan ikke helt hitte ud af det.

Håber I kan hjælpe mig...

Thomas
Avatar billede repox Seniormester
22. december 2010 - 10:18 #1
Det er en rigtig uheldig ting du har fået lavet dig der - normalt ville man fokusere på database normalisering.

Jeg vil mene at du skal bide i det sure æble og så komme væk fra dit madeby felt og fokusere på at normalisere dine data.
Avatar billede thb Nybegynder
22. december 2010 - 14:52 #2
Jeg er ikke helt med på hvad du mener... Hvordan skal det bygges op ?
Avatar billede thb Nybegynder
22. december 2010 - 15:12 #3
Det bygget om som hvis man havde en bil per række, og feltet madeof bare så reference til en anden tabel med motordele...

Så bil #1 kan indeholde motordele 2,4,10,23

og så skal jeg lave en søge mulighed hvor folk kan vælge at se alle biler med en bestemt motordel.

Hvordan bør dette så bygges op, hvis jeg er på vej den forkert vej ?
Avatar billede repox Seniormester
22. december 2010 - 16:06 #4
Du er jo faktisk startet godt, men du sluttede bare skidt.

Forestil dig du har tre tabeller:
Biler
Motordele
Biler_Motordele

De to første tabeller kan du forhåbentligt selv relatere til.

Den sidste er din reference mellem de to første to.

Det du gør er at indsætte en række i tabellen for hver motordel i bilen.
Så du kan have flere rækker med forskellige dele, men som refererer til samme bil.

Når du så søger på din motordel kan du hente de(n) bil(er) ud som bruger den specifikke motordel:
Avatar billede thb Nybegynder
22. december 2010 - 22:05 #5
Hej igen,

Lige et spørgsmål igen, hvordan laver jeg så mit sql kald når jeg søger ned i min tabel med biler og så have de biler som f.eks. er røde (et bool felt i tabellen) og har motordel 1,4,20.

Tusind tak for hjælpen endtil videre...
Håber lige at du når at smide et svar inden du smutter i seng, for så vil jeg fikse det hele i løbet natten... Jeg skal have lavet det her.

Thomas
Avatar billede thb Nybegynder
23. december 2010 - 20:41 #6
Nu har jeg fået flyttet alt mit indhold madeof feltet ud i den map tabel du snakker om, men ved stadigvæk ikke helt hvordan jeg fanger det i min søge query...

Thomas
Avatar billede thb Nybegynder
27. december 2010 - 20:08 #7
repox > Hvis du ikke har mere i denne sag så smid et svar, så du kan få nogle point !
Avatar billede repox Seniormester
29. december 2010 - 20:19 #8
Jeg har slet ikke fået mails om at du har svaret mig, så jeg har slet ikke været opmærksom på det før nu her hvor jeg gik mine indlæg igennem :s

Fik du løst problemet eller gik det i stampe?
Avatar billede thb Nybegynder
29. december 2010 - 20:27 #9
Nu er jeg bare løbet ind i tusind andre problemer :)

Jeg endt med query som er noget i stil med:

SELECT * FROM biler b, bil_dele bd WHERE (b.id = bd.bil_id) AND (bd.madeof_id = 3 OR bd.madeof_id = 15) AND b.color = 'red'

og den virker bortset fra at lige nu vælger den biler med enten madeof_id 3 elle 15 hvor jeg gerne ville have at den skulle vælge biler med begge repræsenteret.

Det virker nogenlunde, nu dog ikke helt efter hensigten.
Måske du har en ide til hvad man kunne gøre.

Thomas
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

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