Avatar billede michaeltryl Seniormester
10. april 2011 - 19:15 Der er 6 kommentarer og
1 løsning

problem med SQL

Jeg har denne SQL
SELECT vitser.vits_id, vitser.titel, vitser.vits, vits_kategorier.kat_id FROM vitser JOIN vits_kategorier ON vitser.vits_id = vits_kategorier.vits_id WHERE vitser.titel LIKE '%gg%' OR vitser.vits LIKE '%gg%'

men
en vits kan være flere gange i tabellen vits_kategorier, så når denne sql køres kommer den samme vits flere gange.

Er der nogen som kan fortælle hvordan den skal se ud sådan jeg kun får 1 af hver.
Jeg har prøvet med select distinct
10. april 2011 - 20:16 #1
Du siger, tror jeg, at en vits kan hoere til flere kategorier, for eksempel at vits med vits_id = 7 hoerer til vits_kategori 8 og ogsaa til vits_kategori 12.  Men saa er det ogsaa et korrekt resultat af din select distinct at du faar to linier, en med id 7 kategori 8 og en med id 7 kategori 12. Det er to forskellige soegeresultater. Hvis du kun vil have hver vits en gang, saa skip kategorien, altsaa:

SELECT vitser.vits_id, vitser.titel, vitser.vits FROM vitser WHERE vitser.titel LIKE '%gg%' OR vitser.vits LIKE '%gg%'

Noget andet er hvis du vil soege vitser af kategori "dumme vits", saa siger du:

SELECT vitser.vits_id, vitser.titel, vitser.vits, vits_kategorier.navn FROM vitser JOIN vits_kategorier ON vitser.vits_id = vits_kategorier.vits_id WHERE vits_kategorier.navn = "dumme vits"
Avatar billede michaeltryl Seniormester
10. april 2011 - 21:03 #2
ok det giver mening.
Hvad så hvis jeg vil søge efter vitser som indeholder "hej" i titel eller vits i kategori 6 og 8
10. april 2011 - 21:26 #3
Du vil have vitser der er enten i kategori 6 eller kategori 8 og som indeholder "hej" i titel.  For hver vits vil du have id, titel, og vitsen selv, og du vil kun have hver vits en gang.  Korrekt?

Saa skulle dette virke (ikke testet).  (Jeg goer samtidig brug af alias'er (oegenavne for tabellerne) for at goere det kortere)

SELECT v.vits_id, v.titel, v.vits FROM vitser v JOIN vits_kategorier k ON v.vits_id = k.vits_id WHERE v.kat_id = 6 OR v.kat_id = 8
10. april 2011 - 21:29 #4
den kom for hurtigt afsted.  For at faa  "hej" i titel bliver forespoergslen denne:

SELECT v.vits_id, v.titel, v.vits FROM vitser v JOIN vits_kategorier k ON v.vits_id = k.vits_id WHERE k.kat_id = 6 OR k.kat_id = 8 AND v.titel LIKE %hej%
Avatar billede michaeltryl Seniormester
10. april 2011 - 21:52 #5
Du vil have vitser der er enten i kategori 6 eller kategori 8 og som indeholder "hej" i titel.  For hver vits vil du have id, titel, og vitsen selv, og du vil kun have hver vits en gang.  Korrekt?

Det er korrekt forstået.

Jeg går ud fra det er sådan her du mener

SELECT vitser.vits_id, vitser.titel, vitser.vits FROM vitser JOIN vits_kategorier ON vitser.vits_id = vits_kategorier.vits_id WHERE vits_kategorier.kat_id='6' OR vits_kategorier.kat_id ='8' AND vitser.titel LIKE '%hej%'

men den henter de samme ud fra databasen uanset om der står "hej" eller "fdgdfgfdgdfg" i vitser.titel LIKE '%hej%'
11. april 2011 - 06:26 #6
Det er fordi jeg ikke fik sat parantes omkring de to OR.  (Og saa skal jeg ogsaa have DISTINCT med:)

SELECT DISTINCT vitser.vits_id, vitser.titel, vitser.vits FROM vitser JOIN vits_kategorier ON vitser.vits_id = vits_kategorier.vits_id WHERE (vits_kategorier.kat_id='6' OR vits_kategorier.kat_id ='8') AND vitser.titel LIKE '%hej%'

Jeg haaber dette virker som tiltaenkt.
Avatar billede michaeltryl Seniormester
11. april 2011 - 21:54 #7
mange tak for hjælpen.
Det virker som ønsket.
Du har fået point
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