首页 > 解决方案 > 在 MySQL 中对两个表中的数据进行分组

问题描述

我有 2 张桌子,posts并且posts_flags. posts包含用户发表的帖子行。现在,如果某个帖子被举报,用户可以举报该帖子,从而在posts_flags表格中创建一个标志。所以基本上,posts_flags同一个帖子可以有多个标志。

现在,我要做的是posts从表中获取行posts并添加一列以显示已标记的列。为了获得该专栏,我正在尝试使用postsposts_flags使用post_id. 但是,我现在遇到了一个问题,因为posts_flags同一个帖子可以有多行。

我怎样才能得到这些数据?下面是我的表格的示例结构以及我想要实现的目标。

帖子表

| post_id | post_title | post_body |
|    1    |   title a  | something |
|    2    |   title b  | something |
|    3    |   title c  | something |

post_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

谢谢!

标签: mysqlsql

解决方案


与其加入整个表,不如加入一个子查询,每个帖子 ID 只返回 1 行。

它还需要是 aLEFT 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

推荐阅读