我正在尝试将论坛帖子计算在内。我有两张桌子:
Threads
和Replies
。
Threads
表的结构如下:
Id
ForumId
Last Poster
Title
Text
Replies
表的结构如下:
Id
ThreadId
Text
我要做的是获取一个ForumId中的回复和主题总数。 我看着谷歌,但仍然没有运气。
我将如何做到这一点?
我这样做的原因是因为我的帖子太多而我的旧方法很慢。
答案 0 :(得分:1)
Join是你最好的朋友。
选择每个ForumId中的线程数+回复数
select ForumId, count(*) from Threads,Replies
where Threads.id=Replies.ThreadId
group by ForumId
如果你知道ForumId(我们称之为x):
select count(*) from Threads,Replies
where Threads.id=Replies.ThreadId and ForumId=x
使用php和mysql_ functions运行查询的基本步骤
答案 1 :(得分:0)
以下查询返回一行包含两个字段,其中包含给定论坛的回复计数和主题计数(将1
替换为实际的论坛ID):
SELECT COUNT(*) ReplyCount, COUNT(DISTINCT ThreadId) ThreadCount
FROM Replies
WHERE ThreadId IN (SELECT Id FROM Threads WHERE ForumId = 1)
您也可以使用以下语法:
SELECT COUNT(*) ReplyCount, COUNT(DISTINCT ThreadId) ThreadCount
FROM Replies JOIN Threads ON Replies.ThreadId = Threads.Id
WHERE ForumId = 1
甚至这个:
SELECT
(
SELECT COUNT(*)
FROM Replies JOIN Threads ON Replies.ThreadId = Threads.Id
WHERE ForumId = 1
) ReplyCount,
(
SELECT COUNT(*) FROM Threads
WHERE ForumId = 1
) ThreadCount
Replies.ThreadId
和Threads.ForumId
(除了“正常”PK索引)。有关索引和性能主题的精彩介绍,我热烈建议您阅读Use The Index Luke!
但是,如果您使用InnoDB存储引擎,请注意您为二级索引支付的费用(请参阅this article中的“群集的缺点”部分)。