我有这个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
表 react (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
表示帖子表 id,u_id
表示用户表 id,r_id
表示 react id, comment_id
表示评论表id。
现在,我想获取特定 ID 的所有评论,其中包含 react ID 的列表和由登录用户提供的 react 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) react ID 列表
3) 登录用户的 react ID。
最佳答案
您的查询中缺少 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
关于php - 所有帖子消息均未通过 sql GROUP_CONCAT 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405176/