我试图将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只有一个名称,因此您将获得一个用户名作为IDUsers.profile_picture
=与用户名相同;您会为用户得到一张照片Favorites.IDPosts
=用户的帖子ID中的任意一个GROUP_CONCAT(DISTINCT coalesce(Favorites.IDPosts,''))
=所有不同ID的字符串( Select body from Posts ...)
=用户的帖子正文中的任意一个
因此,如果您想要一个列出所有正文的字符串,请使用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/