10. april 2011 - 19:15Der 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
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"
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
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%
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%'
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%'
mange tak for hjælpen. Det virker som ønsket. Du har fået point
Synes godt om
Ny brugerNybegynder
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.