gpt4 book ai didi

SQL:在连接中计数不起作用

转载 作者:行者123 更新时间:2023-12-04 05:12:06 25 4
gpt4 key购买 nike

我有一个 SQL 查询,我只是在其中连接两个表。一张表包含注释,另一张是用户表。我以简单的方式加入表格以获取有关撰写评论(用户名)的用户的用户信息,同时获取评论(评论文本等)。

现在我想统计评论的数量,以便在页面顶部写出正确的评论数量。我通过添加一个 COUNT 和一个别名来保存值。

当我回显 numCount 时,我得到了正确的评论值,但我的评论循环中没有任何评论。一旦我删除计数,我就会再次收到所有评论。我做错了什么?

SELECT
ncID, ncText, ncDate,
uID, uName, uImageThumb,
COUNT(a.ncID) AS numComments
FROM tblNewsComments a LEFT JOIN tblUsers b
ON a.ncUserID = b.uID
WHERE a.ncNewsID = $newID
ORDER BY ncDate DESC

最佳答案

我将假设这是 MySQL(或 SQLite),因为大多数其他 RDBMS 会在此查询上失败。问题是您缺少 GROUP BY子句,在使用像 COUNT() 这样的聚合函数时是必需的。除非要对整个行集进行操作。 MySQL 的异常行为是允许缺少 GROUP BY , 或允许 SELECT 中的列不在 GROUP BY 中,产生不寻常的结果。

执行此操作的适当方法是加入返回 COUNT() 的子查询。每 ncID .

SELECT
ncID,
ncText,
ncDate,
uID,
uName,
uImageThumb,
/* The count returned by the subquery */
ccount.numComments
FROM
tblNewsComments a
LEFT JOIN tblUsers b ON a.ncUserID = b.uID
/* Derived table returns only ncID and count of comments */
LEFT JOIN (
SELECT ncID, COUNT(*) AS numComments
FROM tblNewsComments
GROUP BY ncID
) ccount ON a.ncID = ccount.ncID
WHERE a.ncNewsID = $newID
ORDER BY ncDate DESC

编辑 糟糕 - 看起来您想要每个 ncID 的计数,不是每个 ncUserID 的计数正如我最初拥有的那样。

关于SQL:在连接中计数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784021/

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