0

我有三张桌子:

  • 内容
  • 内容_类别
  • 内容类

有四种类型的 Content Classes,Content_Class 与 Content 行具有 Many:1 关系,以将每个内容与 1 个或多个类链接。

相同的规则适用于类别,类别也与内容行存在多对一关系。

我的目标是,给定一组可能在 category 上过滤的内容行,每个 Class 的 Content_Class 行的总计数是多少?

我当前的查询:

SELECT cc.class_Id, COUNT(*) AS `records`
    FROM Content_Class cc
    LEFT JOIN Content c ON c.id = cc.content_id
    LEFT JOIN Content_Category ccat ON c.id = ccat.content_id
    WHERE cc.class_id IS NOT NULL
    GROUP BY cc.class_id';

这不会提供准确的计数,因为对于包含多个类别关系的内容,内容行在查询响应中的每个类别链接中显示一次,从而增加了类出现的计数。

例如,如果一个内容行映射到两个类别和两个类,它将显示四次,结果中唯一内容到类关系的实际计数加倍......

按唯一内容行获取所有内容类出现的唯一计数的最佳查询是什么?

4

1 回答 1

1

你应该试试这个:

    SELECT count(cc.class_id) FROM (SELECT distinct cc.class_Id, COUNT(*) AS `records`
    FROM Content_Class cc
    LEFT JOIN Content c ON c.id = cc.content_id
    LEFT JOIN Content_Category ccat ON c.id = ccat.content_id
    WHERE cc.class_id IS NOT NULL
    GROUP BY cc.class_id');
于 2013-08-02T21:02:35.227 回答