使用SQL查询获取所有匹配的行

时间:2019-05-30 05:44:11

标签: php mysql sql

我的posts表具有以下数据/结构:

posts_id   post_message   u_id  like_count  created
===================================================
1         content.......  1     25          1559041633
2         content.......  2     25          1559041633

posts_like表具有以下数据/结构:

like_id    posts_id   u_id   r_id    created
=============================================
22         2          1      2       1559041633
27         2          2      4       1559041633
30         1          2      7       1559041633

注意:u_id表示用户ID,r_id表示反应ID,posts_id表示帖子ID。

现在,我想获取posts表中的所有帖子以及users表中的全名以及全部 u_id和{{1 }}下的每个帖子。

例如,您可以看到在r_id下我有posts_id = 2 1和2 u_id 2和4。

需求输出:

r_id

当前我正在使用此SQL查询

first post content  
user full Name
u_id: 2
r_id: 7

second post content  
user full Name
u_id: 1, 2
r_id: 2, 4

以上查询未获得每个帖子下的全部 $query = $this->_db->_pdo->prepare(" SELECT p.posts_id, p.post_message, p.like_count, p.created, u.full_name, u.u_id, pl.r_id FROM posts AS p LEFT JOIN users AS u ON u.u_id = p.u_id LEFT JOIN posts_like AS pl ON pl.posts_id = p.posts_id GROUP BY p.posts_id ORDER BY p.posts_id DESC "); u_id

1 个答案:

答案 0 :(得分:1)

您需要在GROUP_CONCATu_id字段上使用r_id,以获取所有反应的列表。请注意,您需要使用pl.u_id,而不是u.u_id,因为u.u_id是指帖子创建者,而不是对帖子做出反应的人。

SELECT p.posts_id, p.post_message, p.like_count, p.created, 
       u.full_name,
       GROUP_CONCAT(pl.u_id ORDER BY pl.u_id) AS u_id,
       GROUP_CONCAT(pl.r_id ORDER BY pl.u_id) AS r_id
FROM posts AS p 
LEFT JOIN users AS u ON u.u_id = p.u_id 
LEFT JOIN posts_like AS pl ON pl.posts_id = p.posts_id 
GROUP BY p.posts_id
ORDER BY p.posts_id DESC

输出:

posts_id    post_message    like_count  created     full_name   u_id    r_id
2           content.......  25          1559041633  Mary Brown  1,2     2,4
1           content.......  25          1559041633  John Smith  2       7

Demo on dbfiddle