Visa ett inlägg
Oläst 2004-11-09, 23:01 #12
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
heyday heyday är inte uppkopplad
Medlem
 
Reg.datum: Jun 2004
Inlägg: 60
Där ser man vad slow writing kan leda till... Jajja... Vidare.

Jag ser det svårt att lösa det med en generell SQL.
Som jag förstår det så vill du på en och samma rad få ut olika många kategorier beroende på hur många kategorier en registerrad har. Problemet med det tänket är att varje rad måste innehålla exakt lika många kolumner. Och det skulle inte bli fallet om en rad har en kategori, en annan tre.

Det går att lösa, som du är inne på, med en left join. Men då måste du veta innan hur många kategorier det kan finnas för en registerrad innan du ställer frågan.

Enklast gör du det genom att begränsa antalet kategorier en registerrad kan ha, genom att göra en kolumn per kategori. Säg att vi begränsar det till tre.

Då skulle registertabellen (rt i sqlen) se ut som följer:
[id] [namn] [cat1id] [cat2id] [cat3id]

Kategoritabellen (ct i sqlen):
[catid] [namn]

SQLen skulle se ut som följer:
Kod:
SELECT 
 * rt.name
 * ct1.name cat1name
 * ct2.name cat2name
 * ct3.name cat3name
FROM 
 * rt
 * LEFT JOIN ct AS ct1 ON rt.cat1id=ct1.catid
 * LEFT JOIN ct AS ct2 ON rt.cat2id=ct2.catid
 * LEFT JOIN ct AS ct3 ON rt.cat3id=ct3.catid
Som du ser blir SQLen bara längre och längre ju fler kategorier en registerrad kan finnas i, därför måste man veta innan man frågar, hur många det kan finnas.

Det skulle vara möjligt att göra den mer dynamisk. Men jag tror att klockan är för mycket för att jag ska kunna förklara det rätt. Principen är en blandning av den jag förklarat här, och den som diskuterats innan.

EDIT:
Jag är tydligen för långsam idag. Detta är ett svar på Tvartoms meddelande kl 2309 (servern verkar ha sommartid fortfarande)
*vad övrigt är* Nokias "Get togeather do whatever" reklam har ett otroligt skönt soundtrack!
heyday är inte uppkopplad   Svara med citatSvara med citat