mysql - 对 3 个表的请求进行计数

标签 mysql

这是我的问题。我有 3 张 table ,例如

AUTHORS
    id (INT, PRIMARY KEY)
    name (VARCHAR)

WRITINGS
    id (INT, PRIMARY KEY)
    content (TEXT)
    author_id (INT, FOREIGN KEY)

COMMENTS
    id (INT)
    commentary (TEXT)
    author_id (INT, FOREIGN KEY)

我知道如何通过以下请求来计算每个用户有多少文章或评论:

SELECT A.id, A.name, COUNT(W.id)
FROM AUTHORS AS A
LEFT JOIN WRITINGS AS W
    ON A.id = W.author_id
GROUP BY A.id;

SELECT A.id, A.name, COUNT(C.id)
FROM AUTHORS AS A
LEFT JOIN COMMENTS AS C.author_id
    ON A.id = C.author_id
GROUP BY A.id;

但是有没有办法在一个唯一的请求中获取这两个计数(写作和评论)?

其他挑战:同样的问题,但没有嵌套请求。

提前致谢

最佳答案

将其中一个查询放入子查询中,并将其与其他查询连接起来。

SELECT A.id, A.name, IFNULL(COUNT(W.id), 0) AS writing_count, IFNULL(C.comment_count, 0) AS comment_count
FROM AUTHORS AS A
LEFT JOIN WRITINGS AS W
    ON A.id = W.author_id
LEFT JOIN (
    SELECT author_id, COUNT(*) AS comment_count
    FROM COMMENTS
    GROUP BY author_id) AS C
    ON A.id = C.author_id
GROUP BY A.id

关于mysql - 对 3 个表的请求进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39418565/

相关文章:

mysql - 来自子查询的组连接非常慢

php - 如何在 for 循环中循环以获取具有相同 ID 的多个值

php - 如何才能让每个电影标题只显示一次?

php - 使用 ajax 从 php 检索数据

c# - 如何在数据库C#中查找表的主键

php - 使用 PDO 和 mysql 运行选择查询不起作用

MySQL GROUP BY 不是空行

php - 如何存储有关表的元数据?

php - Ajax PHP MySQLI - 获取最后更新的行,但未准备好文档

php - Yii2 显示每个循环使用的数据