使用php显示类别中的帖子数量

时间:2017-04-13 18:51:59

标签: php mysql

我有一个自定义的php博客,我有类别和帖子。

在侧边小部件中,我列出了所有类别标题,并且在每个类别标题旁边,我想显示它们包含的帖子数量。

我该怎么做?

我的类别表有2列:cat_id和cat_title 我的帖子表有一个post_category_id列。

3 个答案:

答案 0 :(得分:0)

由于你的问题非常简单,我不会给你代码,但给你答案,所以你必须实现它。要解决您的问题,您有两种选择:

1。使用WHERE语句

您可以阅读here

2。使用内部联接

您可以阅读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