Hej, Går det inte utan subselects? Jo det borde det göra, Så här skulle iofs mitt exempel se ut: Ja, jag såg att det var lite fel inuti count() men det ger ändå inte rätt resultat. Varför join med forumThreads? I vilken tabell ligger kolumnen visible? Inte en aning=) <code> Hur ser din ASP sida ut? Jag löste det med kod istället. <code>Count från två tabeller
Har tre tabeller och vill få ut antal poster i de två senare där vissa kriterier matchar den första.
<code>
SELECT tF.*,
(SELECT COUNT(*) FROM tblforumthreads WHERE ForumId = tF.Id) AS ThreadCount
(SELECT COUNT(*) FROM tblforumposts WHERE ThreadId = tT.Id) AS PostCount
FROM tblforums AS tF
LEFT JOIN tblforumthreads AS tT
ON tF.Id = tT.ForumId
WHERE Visible = (1)
ORDER BY ForumName
</code>
Det jag vill är att tF.Id skall vara unikt, som det är nu returneras ett Id för varje tT.Id som finns.
Mvh DavidSv: Count från två tabeller
Chansning:
<code>
SELECT tF.ForumName, COUNT(tf.id), COUNT(tt.id)
FROM tblforums tf LEFT JOIN tblforumthreads tt ON tf.Id = tt.forumid
LEFT JOIN tblforumposts tp ON tp.threadid = tt.id
WHERE visible = 1
GROUP BY ForumName
</code>Sv:Count från två tabeller
Problemet är att Count() inte räknar rätt för min del.
Exempelvis innehåller tabellen tT endast 2 poster som har ForumId = 1, men count returnerar 8.
tP innehåller 7 poster som alla har ThreadId = 1
Förenklat ser det ut så här:
tF:
<code>
id | ForumName
-------------------------------
1 Test
2 Rad två
3 Rad tre
</code>
tT:
<code>
id | ForumId
-------------------------------
1 1
2 1
</code>
tP:
<code>
id | ThreadId
-------------------------------
1 1
2 1
3 1
4 1
5 1
6 1
7 1
</code>Sv: Count från två tabeller
<code>
SELECT tF.ForumName, COUNT(tt.id), COUNT(tp.id)
FROM tblforums tf LEFT JOIN tblforumthreads tt ON tf.Id = tt.forumid
LEFT JOIN tblforumposts tp ON tp.threadid = tt.id
WHERE visible = 1
GROUP BY ForumName
</code>
Vad ger det för resultat?Sv:Count från två tabeller
Frågan returnerar:
<code>
Id | Count1 | Count2
------------------------
1 8 7
2 0 0
</code>
Har du någon aning om varför?
Mvh DavidSv: Count från två tabeller
Att använda subselect är rätt lösning, att försöka med join som föreslagits i andra inlägg går inte.Sv: Count från två tabeller
Vad får du för resultat om du kör:
<code>
SELECT tF.ForumName, tt.id, visible
FROM tblforums tf, tblforumthreads tt
WHERE tf.Id = tt.forumid
</code>Sv:Count från två tabeller
ForumName | Id | visible
-----------------------------------------
Föredrag 1 1
Föredrag 2 1
</code>
Kolumnen visible ligger i tblforums tabellen och är av datatypen tinyint. 1/0Sv: Count från två tabeller
Jag tror jag kan lösa det alternativt med en datashape.Sv:Count från två tabeller
Gillar dock generellt att skriva så bra frågor mot DB som möjligt.
Plockade ut id och körde separat count(*) på tblforumthreads och tblforumposts.
Tack ändå för hjälpen!Sv: Count från två tabeller
SELECT tF.*,
(SELECT COUNT(*) FROM tblforumthreads WHERE ForumId = tF.Id) AS ThreadCount
(SELECT COUNT(*) FROM tblforumposts
WHERE ThreadId in (
SELECT id
FROM tblforumthreads
WHERE forumid = tf.id) AS PostCount
FROM tblforums AS tF
WHERE Visible = 1
ORDER BY ForumName
</code>