我试图将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;
答案 0 :(得分:1)
您按IDUser分组。因此,您选择的所有其他字段都是以某种方式聚合的。您可以指定所需的聚合(MIN,MAX,GROUP_CONCAT等),也可以获得随机匹配。那么让我们来看看你选择了什么:
Users.username
=用户ID的“随机”用户名,但由于每个用户ID只有一个名称,因此您获得了id的一个用户名Users.profile_picture
=与用户名相同;你得到了一张用户的照片Favorites.IDPosts
=用户帖子ID中随机的一个GROUP_CONCAT(DISTINCT coalesce(Favorites.IDPosts,''))
=所有不同ID的字符串( Select body from Posts ...)
=用户帖子正文中随机的一个因此,如果您想要一个列出所有实体的字符串,那么就像使用帖子ID一样使用group_concat:
GROUP_CONCAT(DISTINCT
( Select body
from Posts
where Favorites.IDPosts=Posts.IDPosts
AND Users.IDUser=Favorites.IDUser
)) as bodies