我有 2 个表,posts
和 posts_flags
。 posts
包含用户发表的帖子行。现在,如果某个帖子被举报,用户可以举报该帖子,从而在 posts_flags
表中创建一个标志。所以基本上,posts_flags
可以为同一个帖子有多个标志。
现在,我要做的是从 posts
表中获取 posts
行并添加一列以显示已标记的列。为了获得该列,我尝试使用 post_id
与 posts
和 posts_flags
进行 INNER JOIN。但是,我现在遇到了一个问题,因为 posts_flags
可以为同一个帖子包含多行。
如何获取这些数据?下面是我的表格的示例结构以及我想要实现的目标。
帖子表
| post_id | post_title | post_body |
| 1 | title a | something |
| 2 | title b | something |
| 3 | title c | something |
posts_flags 表
| post_id | user_id |
| 1 | 4 |
| 1 | 5 |
| 2 | 5 |
我正在努力实现的目标
| post_id | post_title | post_body | flagged
| 1 | title a | something | 1
| 2 | title b | something | 1
| 3 | title c | something | 0
谢谢!
最佳答案
不要加入整个表,而是加入一个子查询,每个帖子 ID 只返回 1 行。
它还需要是 LEFT JOIN
而不是 INNER JOIN
,因此结果将包含没有标志的帖子的行。
SELECT p.*, pf.post_id IS NOT NULL AS flagged
FROM posts AS p
LEFT JOIN (
SELECT DISTINCT post_id
FROM posts_flags) AS pf ON p.post_id = pf.post_id
关于mysql - 在 MySQL 中对两个表中的数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860010/