我有一个自定义的php博客,我有类别和帖子。
在侧边小部件中,我列出了所有类别标题,并且在每个类别标题旁边,我想显示它们包含的帖子数量。
我该怎么做?
我的类别表有2列:cat_id和cat_title 我的帖子表有一个post_category_id列。
答案 0 :(得分:0)
由于你的问题非常简单,我不会给你代码,但给你答案,所以你必须实现它。要解决您的问题,您有两种选择:
WHERE
语句您可以阅读here。
您可以阅读here。
第一个更容易,据我所知,它也更快。
过滤结果并通过PHP获取后,您可以使用int $mysqli_result->num_rows;
(OO样式)或int mysqli_num_rows ( mysqli_result $result )
(程序样式)(documentation)获取行数。
答案 1 :(得分:0)
为什么不使用:
$count = count($mysqli_result_array);
答案 2 :(得分:0)
它足以计算SQL中每个类别的帖子数量。
select post_category_id, count(*) from posts group by post_category_id;
但是,此查询需要对帖子进行全表扫描,因此每次访问页面时都要执行此操作太慢。这个问题有几种解决方案。
一种解决方案是将post_count列添加到您的类别表中,并定期运行查询以更新您的后计数。
update categories
set categories.post_count = i.cnt
from (
select post_category_id, count(*) cnt
from posts
group by post_category_id
) i
where categories.cat_id = i.post_category_id
另一种解决方案是将post_count列添加到您的类别表中,并为您的帖子表创建一个触发器,每当添加(或删除)帖子时,该表会自动更新计数。此解决方案具有优势(计数始终是最新的,并且逐步更新)和缺点(每个发布现在都会在帖子计数上产生锁争用)。触发器代码可能会根据您使用的数据库而有所不同,但插入触发器应如下所示:
CREATE TRIGGER post_count_trigger ON posts
AFTER INSERT
BEGIN
update categories set post_count=post_count+1 where cat_id=post_categori_id
END