带有GROUP_CONCAT选项的MYSQL查询

问题描述 投票:0回答:1

我在从表中获取正确的结果时遇到问题。我有3张桌子:表格:文章

|article_id          | article_title   |
|1                   | Title 1         |
|2                   | Title 2         |

表格:Invited_to_read

|user_id             | article_id      |
|10                  | 1               |
|20                  | 1               |
|10                  | 2               |
|10                  | 3               |

表:已读

|user_id             | article_id      |
|10                  | 1               |
|20                  | 1               |
|30                  | 1               |
|20                  | 2               |

如果被邀请的每个人还阅读文章,我想获得的信息,结果必须为true,否则为false。例如,如果我想获取有关article_id = 1的信息,那么当所有受邀用户阅读该信息时,我都应该获得TRUE。例如,如果我想获取有关article_id = 2的信息,那么我应该以至少一名邀请未确认阅读的用户身份获得FALSE。例如,如果我想获取有关article_id = 3的信息,那么我应该得到FALSE,因为没有任何用户确认阅读。如果不邀请阅读文章的某些用户确认该文章,则根本不重要。所以底线。我需要知道所有受邀用户是否都阅读过文章。谢谢。

mysql group-concat
1个回答
0
投票

您可以通过将LEFT JOIN表与Invited_to_read表进行readed并比较被邀请阅读文章的用户数与已经阅读过的用户数来获得所需的结果文章:

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

Demo on SQLFiddle

© www.soinside.com 2019 - 2024. All rights reserved.