gpt4 book ai didi

mysql - 如何使用与 table1 无关的子句正确计算 table2 中与 table1 中的项目相关的行

转载 作者:行者123 更新时间:2023-11-28 23:29:13 24 4
gpt4 key购买 nike

我有一个简单的杂志,还有包含帖子、评论、类别等的表格。在列出单个类别时,我想在列表中列出每个帖子的评论总和,但这个数字是错误的,这让我发疯.请注意,单个帖子可以属于多个类别。

这是简单的表结构

posts
id | title | categoryid | content | published
---------------------------------------------

comments
id | postid | comment
---------------------

category_rel
postid | categoryid
-------------------

categories
id | category
-------------

我使用以下 sql(简化为这个例子):

SELECT posts.*, categories.id AS categoryid, 
categories.category AS categorytitle,
COUNT(comments.postid) AS CNT
FROM posts
LEFT JOIN comments ON posts.id = comments.postid
INNER JOIN category_rel ON posts.id = category_rel.postid
INNER JOIN categories ON category_rel.categoryid = categories.id
WHERE posts.published=1
GROUP BY posts.id;

这个陈述给我错误的结果,有点像帖子所属类别的累积数量并乘以评论的实际数量。如果我删除 SQL 的类别部分(这不好,我需要类别 ID 和名称),我会收到正确的值:

SELECT posts.*, COUNT(comments.postid) AS CNT 
FROM posts
LEFT JOIN comments ON posts.id = comments.postid
WHERE posts.published=1
GROUP BY posts.id;

更具体地说:其中一篇帖子有 1 条评论,属于 7 个类别。值 CNT 将变为 7,而不是 1。

知道如何更改第一个 SQL 以获得正确的值吗?

最佳答案

您想计算每个帖子的评论数 - 而不是每个类别。因此,实现这一目标的一种方法是首先进行计数(在子选择中,因为 MySQL 目前还没有 CTE),然后将结果加入类别表中:

SELECT countpost.*, categories.id AS categoryid, 
categories.category AS categorytitle
FROM
-- subselect post and comment count
(
SELECT posts.*, count(comments.postid) as CNT FROM posts
LEFT JOIN comments ON posts.id = comments.postid
WHERE posts.published = 1
GROUP BY posts.id
) as countpost
-- join category table
INNER JOIN category_rel ON countpost.id = category_rel.postid
INNER JOIN categories ON category_rel.categoryid = categories.id ;

请参阅此 fiddle :http://sqlfiddle.com/#!9/f9c6f/1

关于mysql - 如何使用与 table1 无关的子句正确计算 table2 中与 table1 中的项目相关的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37942247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com