MYSQL 带有 GROUP_CONCAT 选项的查询
MYSQL query with GROUP_CONCAT option
我在从表格中获取正确结果时遇到问题。
我有 3 个表:
Table:文章
|article_id | article_title |
|1 | Title 1 |
|2 | Title 2 |
Table: Invited_to_read
|user_id | article_id |
|10 | 1 |
|20 | 1 |
|10 | 2 |
|10 | 3 |
Table: 已读
|user_id | article_id |
|10 | 1 |
|20 | 1 |
|30 | 1 |
|20 | 2 |
如果被邀请的人都看过文章,我想得到的信息,结果必须为真,否则为假。
例如,如果我想获取 article_id = 1 的信息,那么我应该得到 TRUE,因为所有受邀用户都阅读了它。
例如,如果我想获取 article_id = 2 的信息,那么作为用户我应该得到 FALSE 至少一个邀请未确认阅读的用户。
例如,如果我想获取 article_id = 3 的信息,那么我应该得到 FALSE,因为没有任何用户确认阅读。
如果一些未被邀请阅读文章的用户确认了它,那它根本不重要。
所以底线。我需要知道是否所有受邀用户都阅读了文章。
谢谢。
您可以通过 LEFT JOIN
将 Invited_to_read
table 转换为 readed
table 并比较受邀用户的数量来获得您想要的结果阅读文章统计 阅读文章的用户数量:
SELECT i.article_id,
COUNT(i.user_id) = COUNT(r.user_id) AS all_read
FROM Invited_to_read i
LEFT JOIN readed r ON r.user_id = i.user_id AND r.article_id = i.article_id
GROUP BY i.article_id
ORDER BY i.article_id
输出(对于您的示例数据):
article_id all_read
1 1
2 0
3 0
我在从表格中获取正确结果时遇到问题。
我有 3 个表:
Table:文章
|article_id | article_title |
|1 | Title 1 |
|2 | Title 2 |
Table: Invited_to_read
|user_id | article_id |
|10 | 1 |
|20 | 1 |
|10 | 2 |
|10 | 3 |
Table: 已读
|user_id | article_id |
|10 | 1 |
|20 | 1 |
|30 | 1 |
|20 | 2 |
如果被邀请的人都看过文章,我想得到的信息,结果必须为真,否则为假。
例如,如果我想获取 article_id = 1 的信息,那么我应该得到 TRUE,因为所有受邀用户都阅读了它。
例如,如果我想获取 article_id = 2 的信息,那么作为用户我应该得到 FALSE 至少一个邀请未确认阅读的用户。
例如,如果我想获取 article_id = 3 的信息,那么我应该得到 FALSE,因为没有任何用户确认阅读。
如果一些未被邀请阅读文章的用户确认了它,那它根本不重要。
所以底线。我需要知道是否所有受邀用户都阅读了文章。
谢谢。
您可以通过 LEFT JOIN
将 Invited_to_read
table 转换为 readed
table 并比较受邀用户的数量来获得您想要的结果阅读文章统计 阅读文章的用户数量:
SELECT i.article_id,
COUNT(i.user_id) = COUNT(r.user_id) AS all_read
FROM Invited_to_read i
LEFT JOIN readed r ON r.user_id = i.user_id AND r.article_id = i.article_id
GROUP BY i.article_id
ORDER BY i.article_id
输出(对于您的示例数据):
article_id all_read
1 1
2 0
3 0