Avatar billede ostehamster Nybegynder
18. april 2006 - 22:08 Der er 8 kommentarer og
1 løsning

Inkluder "SQL variable" i LIKE statement

Hej,

Jeg sidder og roder lidt med noget SQL, og kan ikke helt magte opgaven :)

select k.id, count(o.id) as antal from opskrifter o, opskrifter_kategorier k where
(o.kategori like k.id)
group by k.id order by antal desc

Følgende statement virker fint. Problemet er bare, at k.id er en varchar, der indeholder forskellige id'er på formen "3, 7, 9". For at finde alle rækker der indeholder et eksakt ID, kan man skrive:

(kategori LIKE '$id,%' OR kategori LIKE '% $id,%' OR kategori LIKE '%$id')

Hvilket også virker ganske fint. Nu vil jeg så gerne have sat disse to sammen, men kan ikke rigtig finde ud af det. Alle steder i den sidste sætning, skal $id skiftes ud med k.id. Men, hvis bare skriver f.eks. 'k.id,%', så opfattes k.id som en string, og ikke som en variable.

Hvordan skrives det rigtigt?

På forhånd tak

/Christoffer
Avatar billede erikjacobsen Ekspert
18. april 2006 - 22:11 #1
"Hvilket også virker ganske fint."  Jeg tvivler på det virker. Hvis der står "7,9,13" og du søger efter "3", får du så ikke også den med "13" med ?
Avatar billede erikjacobsen Ekspert
18. april 2006 - 22:12 #2
Ok, ok, du har garderet dig med 3 "LIKE"-er, jeg så kun den sidste. Men det er ikke en god måde at gøre det på, hvis du ønsker effektivitet, og som du opdager, kan man ikke bruge reglementerede SQL-sætninger til det.

Hvad med at lave en ekstra tabel?
Avatar billede ostehamster Nybegynder
18. april 2006 - 22:15 #3
Jeps, en tabel der indeholder en række for hvert relation. Således at der skal bruges 3 rækker til "7,9,13".

Jeg har overvejet det, men syntes bare det virkede så "overkill" agtigt. Men det er selvfølgelig nok lettest for mig selv i sidste ende :)
Avatar billede erikjacobsen Ekspert
18. april 2006 - 22:22 #4
Det har andre i hvert fald ment før dig http://en.wikipedia.org/wiki/First_normal_form#First_normal_form

Ellers kan du proppe noget programmering ind mellem 2 sql-sætninger.
Avatar billede erikjacobsen Ekspert
18. april 2006 - 22:28 #5
Du ved hvad vi snakker om. Andre kan begynde her: http://databases.about.com/od/specificproducts/l/aa1nf.htm
Avatar billede ostehamster Nybegynder
18. april 2006 - 22:32 #6
Jeps, der kan være meget kode mellem to sql-sætninger. Der kan også være for meget, hvilket der er på den nuværende side. Derfor prøver jeg at optimere, så mest muligt ligger i SQL.

Så, jeg er gået i gang med at lave nogle flere tabeller :)
Avatar billede ostehamster Nybegynder
07. juni 2006 - 17:10 #7
Erik, vil du have point?
Avatar billede erikjacobsen Ekspert
07. juni 2006 - 19:45 #8
Nej tak.
Avatar billede ostehamster Nybegynder
08. juni 2006 - 13:08 #9
Jamen så lukker jeg, takker for hjælpen
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