Hej... Hmm, något i stil med följande Bättre/snabbare lösning: Hej Thomas... Hej Ola...Dubbel utsökning
Jag har ett litet klurigt problem som någon expert på SQL-utsökningar säkert kan hjälpa mig med. Jag vänder mig hit i hopp om hjälp.
PERSONER
------------
id
namn
KATEGORIER
---------------
id
kategori_namn
PERSONKATEGORIER
------------------------
id
kategori_id
personer_id
En person kan som ni förstår vara med i flera kategorier. Vad jag vill är att få ett RecordSet som innehåller lika många Records som det finns kategorier. Varje Record skulle jag vilja innehöll dels namnet på en kategori samt någon slags flagga om att det person_id som jag skickar in i SP:n eller så är med i just den kategorin.
Ex.
"ASP-hackare", 1
"SQL-nörd", 0
"PHP-latjare", 1
"JSP-surfare", 0
osv...
Om flaggan är en bool eller ngt annat saknar sexuell betydelse. Sortering och sånt tjafs fixar jag också själv men det är just det att få ett RS som innehåller alla kategorinamn samt en flagga för de kategorinamn där ett visst person_id matchar.
Trevlig helg till alla och en var!Sv: Dubbel utsökning
<code>
SELECT namn, SUM(hit) AS exists FROM
(SELECT kategorier.kategori_namn AS namn, (personkategorier = #personid#) AS hit FROM kategorier
LEFT OUTER JOIN personkategorier ON personkategorier.kategori_id = kategorier.id) AS tmp
GROUP BY namn
</code>
Om jag inte har klantat mig i tankesättet ska ovanstående först sätta en etta eller nolla beroende på om #personid# existerar (du ersätter detta med en siffra som motsvarar personens id) eller inte. Därefter summeras allting ihop och där ser man antingen en 1 eller 0, beroende på om personen existerar i kategorin eller inte.
Dock, detta räknar egentligen ihop hur många gånger personen finns i varje kategori, men kan denne endast finnas en gång blir det ju bara 0 eller 1 som blir slutresultatet. Vill du vara garanterad att enbart 0 eller 1 ges kan du ersätta SUM med MAX i frågan.Sv: Dubbel utsökning
SELECT K.kategori_namn,
CASE
WHEN PK.kategori_id IS NULL THEN 0
ELSE 1
END AS medlem
FROM KATEGORIER K
LEFT OUTER JOIN
PERSONKATEGORIER PK
ON K.id = PK.kategori_id AND PK.personer_id = 5Sv:Dubbel utsökning
Jag förstår hur du har tänkt men jag fick det inte riktigt att rocka. Stort tack dock!
mvh
// PeterSv:Dubbel utsökning
Den här lösningen var helt underbar! Det fungerar givetvis klockrent, precis som jag vill. Dessutom är det en riktigt stilig lösning... :)
mvh
// Peter