我正在使用此代码
$sql1 = mysql_query("SELECT section_id FROM forum_posts WHERE section_id='$sectionID' ");
$num_rows = mysql_num_rows($sql1);
计算特定类别下的帖子数量,以便在论坛主页上显示特定部分中有多少帖子。 那么有更好的选择来浏览该类型的所有帖子。如果我使用它,我认为这将是一个巨大的性能消耗。
编辑1:我只需显示论坛中每个部分下的帖子数量,因此我想在主页上查看每个部分目前有多少主题。 什么是最佳的mysql查询。
编辑2:我应该替换phpmanual中所述的mysql_query函数吗?
答案 0 :(得分:2)
只需在sql中使用count。
$sql1 = mysql_query("SELECT count(post_id) as 'count_of_posts' FROM forum_posts WHERE section_id='$sectionID' ");
如果您想同时获得所有部分计数,可以这样做:
$sql1 = mysql_query("SELECT section_id, count(post_id) as 'count_of_posts' FROM forum_posts WHERE section_id='$sectionID' group by section_id");
答案 1 :(得分:1)
使用COUNT()聚合函数计算行数是更正常的SQL。如果您需要一次计算几个部分,请使用GROUP BY。但你知道吗,对吧?
首先是基准,优化第二。
我的建议:
假设您在1e3部分中有1e9个帖子。大多数时候,大多数部分的帖子都不会改变。因此,您只需修改受操作影响的部分的计数 - 例如,对于添加/删除,您只需更新一个部分,对于移动,两个部分,留下998个部分的计数未经修改并避免昂贵的计数操作
但我认为你不太可能有1e9个帖子(我确定Stackoverflow没有)。
考虑调查Stack Overflow如何管理其标签 - 问题计数。
答案 2 :(得分:0)
SELECT distinct section_id, count(section_id) as num_of_posts FROM forum_posts WHERE section_id='$sectionID' group by section_id
然后做$ num_of_rows = $ sql1 [' num_of_posts'];
或保持您的查询不变,请执行count($sql1)
;