我试图将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 =用户的帖子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/

10-11 04:46