php - SQL 将表键与 Group_Concat 分开

标签 php mysql sql database join

我正在尝试将 IDPosts 列分隔为每个 ID 的单行(尝试创建最喜欢的帖子列表)。它旁边的列列出了所有正确的列,但已分组,我想为 favuserposts 列中分组在一起的每个列获取一行。请参阅下面的我的图片和查询。如果您需要更多信息,请告诉我。

enter image description here

显示所有内容,但无法显示多个收藏的帖子 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 的字符串
  • (从帖子中选择正文...) = 用户的帖子正文中的随机一个

因此,如果您想要一个列出所有正文的字符串,请使用 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/

相关文章:

php - fatal error :从无效上下文调用私有(private) MyObject::__construct()

php - 使用文件导出和导入 MySQL 表 - 没有 phpMyAdmin?

php - 数据库不会用 mysqli 第二次更新

mysql - SQL-多次重复 1 列

MySQL:使用来自不同表的值从组中选择最大值?

javascript - 后循环中的 JQuery onclick 函数错误

php - 如何在没有表单或 Javascript 的情况下触发 logout.php 脚本?

mysql - 配置单元查询错误无效的表别名

mysql - 有没有办法使用 MYSQL 中的 max() 函数创建多列?

php - Docker php url 访问