首页 > 解决方案 > 如何使用 mysql GROUP_CONCAT 重复组合多行?

问题描述

我有一个规范化的数据库,我正在尝试使用 JOIN 和 GROUP_CONCAT 从多个表中返回数据。我想通过 createtime 结合图像和内容。我的问题是: GROUP_CONCAT 不工作。我通过 var_dump 尝试了很多次。结果为空

SELECT post_content.*, 
GROUP_CONCAT(distinct kk_user.id) AS uid,  
GROUP_CONCAT(distinct User_follow.receiver_id) AS reid, 
GROUP_CONCAT(distinct kk_user.username) AS name,  
GROUP_CONCAT(distinct images.createtime) AS time
FROM  post_content
LEFT JOIN kk_user
     ON kk_user.id = post_content.User_id 
LEFT JOIN User_follow
     ON User_follow.sender_id = post_content.User_id 
LEFT JOIN images
     ON images.image_id = post_content.User_id  
LEFT JOIN images
     ON images.createtime = post_content.createtime 
WHERE User_follow.receiver_id = 93
     GROUP BY post_content.id 
      ORDER BY post_content.id DESC 

      kk_user
+------------+------------+
|    id      |    name    |  
+============+============+
|     90      |  user1  |    
+------------+------------+
|     91      |  user2  |     
+------------+------------+
|     93      |  user3   |     
+------------+------------+

post_content
+------------+------------+-----------+-----------+--------+--+
|    id      |    content  | User_id  |creattime |           |
+============+============+===========+===========+===========+
|     1     |  Test123   |     93     |   2021-04-07 02:13:8  |
+------------+------------+-----------+
|     2      |  Test456   |    93     |   2021-05-07 03:03:4  |
+------------+------------+-----------+
|     3      |  Test789   |    91    |   2021-05-07 05:03:12  |
+------------+------------+----------+-----------+-----------+

User_follow
+------------+------------+-----------+
| follow_id  | sender_id  |receiver_id|
+============+============+===========+
|     23     |  91  |     1     93
+------------+------------+-----------+
|     12     |  93  |     1    91
+------------+------------+-----------+
|    46     |  90   |     1    91
+------------+------------+-----------+

images
+------------+------------+-----------+-----------+---------+--+--+
|image_id    |      image       | sender_id  |    createtime      |
+============+============+===========+===========+===============+
|    15      |  1574864028.png  |     93     | 2021-05-07 03:03:4  |
+------------+------------+---------------------------------------+
|    16      |  889391628.png   |     93     | 2021-04-07 02:13:8 |
+------------+------------+---------------------------------------+
|    17      |  462594383.png   |     91     | 2021-04-07 02:13:8 |
+------------+------------+----------+-----------+----------------+

我希望我的结果看起来像:

+------+---------+--------------+----------- ----+---------------+-------------------+
|  uid  |  content   |           image             |reid| name   |       time        |
+======+=========+==============+================+===============+==================+
|   93 | Test123 |   889391628.png,462594383.png   | 93  | user3 | 2021-04-07 02:13:8|              
+------+---------+--------------+----------------+---------------+------------------+
|   90  | Test456 |       1574864028.png           | 90  | user1 | 2021-05-07 03:03:4|
+------+---------+--------------+----------------+---------------+------------------+
|   91  | Test789 |                                | 91  | user2 | 2021-05-07 05:03:12|
+------+---------+--------------+----------------+---------------+------------------+

如您所见,我使用简单的 GROUP_CONCAT 。我做错了什么?我必须做什么 ?

标签: mysql

解决方案


推荐阅读