VinnarenMedlem sedan sep. 2005858 inlägg
har följande:
SELECT DISTINCT(c.CategoryId), c.Name, isnull(p.PostId, 0) AS PostId,
(SELECT COUNT(PostId) FROM forum_Post WHERE CategoryId = c.CategoryId AND ParentPostId = 0) AS Topics,
(SELECT COUNT(PostId) FROM forum_Post WHERE CategoryId = c.CategoryId AND ParentPostId != 0) AS Replies,
isnull(isnull(CAST(ISNULL((select max(date) from forum_post
where ParentPostId = p.PostId), p.Date) as varchar), ''),'Finns inga poster i denna kategori') AS LastPost
FROM forum_Category AS c
LEFT OUTER JOIN forum_Post AS p
ON p.CategoryId = c.CategoryId
WHERE c.ParentCategoryId = @CategoryId
ORDER BY CategoryId ASC
Jag vill få ut varje kategori en gång. Nu får jag ut kategorin för varje inlägg som finns. Hur löser man detta?
Tacksam för all hjälp :stud
Peter SMedlem sedan dec. 20025 484 inlägg
Distinct fungerar inte på det sättet. Distinct appliceras på hela SELECT-listan. Så det du måste fråga dig är följande: av två eller flera rader med samma kategori, vilken av dem vill jag visa?
VinnarenMedlem sedan sep. 2005858 inlägg
Det kvittar vilken av kattegorierna som visas då de har samma id och namn. Det är kategorierna som e själva "huvud" delen i frågan. Det är dem jag vill ha information om.
LarsGMedlem sedan dec. 200012 465 inlägg
Varför har du med denna om du bara vill visa kategoriinnehåll?
isnull(p.PostId, 0) AS PostId,
VinnarenMedlem sedan sep. 2005858 inlägg
det är för att jag ska kunna få ut id:t till den senaste uppdaterade inlägget.
Som jag har den nu får jag ut följande:
CategoryId Name PostId Topics Replies LastPost
----------- -------------------------------------------------- ----------- ----------- ----------- ------------------------------
3 Test 1 2 1 Apr 20 2008 9:56PM
3 Test 3 2 1 Apr 20 2008 9:56PM
3 Test 4 2 1 Apr 20 2008 9:24PM
LarsGMedlem sedan dec. 200012 465 inlägg
SELECT c.CategoryId,
c.Name,
coalesce(max(postid),0) as PostId,
sum(case when parentPostid = 0 then 1 else 0 end) as topics,
sum(case when ParentPostId <> 0 then 1 else 0 end) AS replies,
coalesce(cast(max(p.date) as varchar(20)),'Finns inga poster i denna kategori') AS LastPost
FROM forum_Category AS c
LEFT OUTER JOIN forum_Post AS p
ON p.CategoryId = c.CategoryId
WHERE c.ParentCategoryId = @CategoryId
group by c.CategoryId,
c.Name
Jag tog bort din order by då categoryid alltid har samma värde.
VinnarenMedlem sedan sep. 2005858 inlägg
kanon, fungerar perfa.
En liten sak bara, kan man när p.date inte är null och det innehåller samma datum som dagens skriva ut "idag kl: 20:37" och för gårdagens "igår kl: 20:37". Äldre skrivs ut med datumet Mån 21 apr, 2008 20:37???
Tacksam för all hjälp :stud
LarsGMedlem sedan dec. 200012 465 inlägg
case when max(p.date) is not null then
case when datediff(dd,getdate(),max(p.date)) = 0 then
'idag kl:' + substring(convert(varchar(20),max(p.date),8),1,5)
else cast(max(p.date) as varchar(20)) end
else 'Det finns inga poster' end
ungefär