我正在尝试将 IDPosts 列分隔为每个 ID 的单行(尝试创建最喜欢的帖子列表)。它旁边的列列出了所有正确的列,但已分组,我想为 favuserposts 列中分组在一起的每个列获取一行。请参阅下面的我的图片和查询。如果您需要更多信息,请告诉我。
显示所有内容,但无法显示多个收藏的帖子 ID:
SELECT Users.IDUser,
Users.username,
Users.profile_picture,
Favorites.IDPosts,
GROUP_CONCAT(DISTINCT coalesce(Favorites.IDPosts,'')) as "favuserposts",
( Select body
from Posts
where Favorites.IDPosts=Posts.IDPosts
AND Users.IDUser=Favorites.IDUser)
FROM Users
LEFT OUTER JOIN Favorites ON Favorites.IDUser = Users.IDUser
GROUP BY Users.IDUser HAVING COUNT(IDPosts)>0;
最佳答案
您按 IDUser 进行分组。因此,您选择的所有其他字段都以某种方式聚合。您要么指定所需的聚合(MIN、MAX、GROUP_CONCAT 等),要么获得随机匹配。那么让我们看看您选择了什么:
Users.username
= 用户 ID 的“随机”用户名,但由于每个用户 ID 只有一个名称,因此您会得到该 ID 的唯一用户名Users.profile_picture
= 与用户名相同;您会得到用户的一张照片Favorites.IDPosts
= 用户的随机帖子 IDGROUP_CONCAT(DISTINCT coalesce(Favorites.IDPosts,''))
= 所有不同 ID 的字符串(从帖子中选择正文...)
= 用户的帖子正文中的随机一个
因此,如果您想要一个列出所有正文的字符串,请使用 group_concat,就像处理帖子 ID 一样:
GROUP_CONCAT(DISTINCT
( Select body
from Posts
where Favorites.IDPosts=Posts.IDPosts
AND Users.IDUser=Favorites.IDUser
)) as bodies
关于php - SQL 将表键与 Group_Concat 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24567151/