首页 > 解决方案 > sql GROUP_CONCAT 未显示所有帖子消息

问题描述

我有这张comments表来存储每个帖子的所有评论

comment_id    comment_message    posts_id   u_id   created
=============================================================
46            comments....       2          6      1559376498
47            comments....       2          6      1559376502
48            comments....       2          6      1559376598

comments_like每个评论反应的表格(r_id)

cl_id    comment_id   posts_id    u_id   r_id   created
=============================================================
42       46           2           6      6     1559376598
43       47           2           6      2     1559376598
44       48           2           6      8     1559376598
45       46           2           1      2     1559376598

注: posts_id表示posts表id,u_id表示users表id,r_id表示reaction id,comment_id表示comment表id。

现在,我想通过反应 id 列表登录用户给出的反应 id 获取特定 ID 的所有评论。

为此,我正在使用以下 SQL 查询,但它没有显示我的预期结果:(

$query = $this->_db->_pdo->prepare("
            SELECT c.*, u.u_id, u.full_name, cl.r_id, GROUP_CONCAT(cl.r_id ORDER BY cl.u_id) AS r_id
            FROM comments AS c 
            LEFT JOIN users AS u ON c.u_id = u.u_id 
            LEFT JOIN comments_like AS cl ON cl.comment_id = c.comment_id 
            WHERE c.posts_id = '$post_id' 
            ORDER BY c.comment_id  ");  

此查询的输出应该是

1)特定帖子ID($post_id)的所有评论;
2) 反应 id 的列表
3) 登录用户的反应 id。

标签: phpmysqlsql

解决方案


您在GROUP BY查询中缺少一个子句,因此它将所有评论分组到一行中;你需要分组c.comment_id。这应该会给你你想要的结果:

SELECT c.*, u.u_id, u.full_name, cl.r_id, 
       GROUP_CONCAT(cl.r_id ORDER BY cl.u_id) AS r_id
FROM comments AS c 
LEFT JOIN users AS u ON c.u_id = u.u_id 
LEFT JOIN comments_like AS cl ON cl.comment_id = c.comment_id 
WHERE c.posts_id = 2
GROUP BY c.comment_id
ORDER BY c.comment_id

输出:

comment_id  comment_message posts_id    u_id    created     u_id    full_name   r_id
46          comments....    2           6       1559376498  6       Bill Jones  2,6
47          comments....    2           6       1559376502  6       Bill Jones  2
48          comments....    2           6       1559376598  6       Bill Jones  8

dbfiddle 上的演示


推荐阅读