当前位置: 首页 > 面试题库 >

计算属于一个类别及其子类别的所有帖子

翁硕
2023-03-14
问题内容

我非常感谢您为我的问题提供的一些帮助:

我有2个MySQL表,类别和帖子,它们的布局(简化)如下:

类别

CATID-名称-parent_id

帖子

PID-名称-类别

我想做的是获取每个类别的帖子总数,包括子类别中的所有帖子。

现在,我通过执行以下操作来获取每个(顶级)类别(而不是子类别)中的帖子总数:

"SELECT c.*, COUNT(p.PID) as postCount 
        FROM categories AS c LEFT JOIN posts AS p 
        ON (c.CATID = p.category) 
        WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC";

再次的问题是,如何获得每个类别的总计,包括每个相关子类别的总计?

由于我正在维护现有系统,因此无法将数据库重组为嵌套集格式。

谢谢你的帮助!


问题答案:

如果类别不是无限嵌套的,则可以一次将它们加入一个级别。以下是最多3个嵌套级别的示例:

SELECT c.name, COUNT(DISTINCT p.PID) as postCount 
FROM categories AS c 
LEFT JOIN categories AS c2
    ON c2.parent = c.catid
LEFT JOIN categories AS c3
    ON c3.parent = c2.catid
LEFT JOIN posts AS p 
    ON c.CATID = p.category
    OR c2.CATID = p.category
    OR c3.CATID = p.category
WHERE c.parent = '0' 
GROUP BY c.CATID, c.name
ORDER BY c.name ASC


 类似资料:
  • 我正在尝试建立自己的Webshop。 我有两个表-products和categories。结构是这样的: 当用户点击main category时,我选择要显示的产品如下所示: 问题是,我希望当用户单击主类别时,也可以选择其子类别中的所有产品。例如,类别是类别的子类别,在db中类似于 如您所见,我的当前选择将不会选择或,因为用户正在查看具有的类别...如何修改我的选择,使它将显示所有产品从主类别的子

  • 这是我在这里的第一篇帖子,而且我是一个初学者,所以请耐心听我说。 我想完成的是创建一个AJAX函数,该函数将以复选框的形式列出所有可用类别,用户可以从中选择。选择并点击“应用”后,我想显示分配给所选类别的帖子中所有标签的列表(也以复选框的形式)。然后用户可以从可用的标签中进行选择,然后在点击最后的“应用”按钮后,将显示相应的帖子。 类似于TED. com的“你感兴趣的是什么?”但是在AJAX中。所

  • 问题内容: 我正在编写类似于博客软件的Web应用程序。有以下三个表 我很难概念化SQL查询,该查询将返回在给定集中具有“所有”标签的帖子。 问题答案: 这是关系划分。 使用和或加倍。 第一种方法的一个例子是。

  • 我有趣的wordpress,并设置了自定义帖子类型(称为产品 我将有一个名为catalog的页面,并希望在一个页面上显示子类别下的所有类别/子类别和产品。 但是,我不确定它的代码。 获取所有类别并回显标题,对于每个带有子类别的父类别,回显子类别,然后回显产品,否则只回显父类别和产品。 类别1(回声父母的东西)子类别1(回声子类别的东西)帖子1(回声帖子的东西)帖子2子类别2帖子1帖子2 第2类第1

  • 有一个类别,具有以下(重要)属性: 我正在尝试实现类别/子类别的概念。一个类别可以有零个或多个子类别。一个类别只能有一个父类别(可以为null)。对于顶级类别,parentCategory=null。 现在,我有一个所有类别的列表,

  • 我有3个表:,,。 表“联接”和。它包含列:、、。 所以一本书可能属于很多类别,一个类别可能有很多本书。 我需要从检索除属于的书籍以外的所有书籍的查询。例如,我想要A类中的所有书籍,但前提是它们不属于B类或C类。我还需要按book.inserted列对结果进行排序。 我知道如何使用2个联接从中获取所有书籍,但不知道如何在结果中从其他类别中排除一些书籍。我无法在PHP中过滤书籍,因为我正在对搜索结果