我的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
。
答案 0 :(得分:1)
您需要在GROUP_CONCAT
和u_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