首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有使用sql GROUP_CONCAT显示所有的post消息。

问没有使用sql GROUP_CONCAT显示所有的post消息。
EN

Stack Overflow用户
提问于 2019-06-01 08:46:19
回答 2查看 30关注 0票数 0

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

代码语言:javascript
复制
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表reaction (r_id)

代码语言:javascript
复制
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表示用户表id,r_id表示reaction id,comment_id表示注释表id。

现在,,,我想得到一个特定ID的所有注释,其中包含一个反应id的和,这个反应id是由日志记录的用户提供的。

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

代码语言:javascript
复制
$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)登录用户的反应标识。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-01 09:00:51

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

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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演示

票数 0
EN

Stack Overflow用户

发布于 2019-06-01 10:32:57

您似乎也想要一个特定用户的反应id。如果是的话:

代码语言:javascript
复制
SELECT c.*, u.u_id, u.full_name,
       MAX(ASE WHEN cl.u_id = ? THEN cl.r_id END) as specific_user_reaction, 
       GROUP_CONCAT(cl.r_id ORDER BY cl.u_id) AS r_id
FROM comments c LEFT JOIN
     users u
     ON c.u_id = u.u_id LEFT JOIN
     comments_like cl
     ON cl.comment_id = c.comment_id 
WHERE c.posts_id = ?
GROUP BY c.comment_id, u.u_id, u.full_name
ORDER BY c.comment_id;

?是用于参数的。这就是如何将值传递给准备好的语句(而不是咀嚼查询字符串)。

第一个?是为您想要的用户准备的。第二个是您想要的帖子(原始代码中的$post_id)。如果您需要了解有关传递参数的更多信息,可以查看准备好的语句上的文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56405176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档