我有以下数据库结构:
用户:
id
name
用户事件:
user_id
activity_id
事件:
id
name
我正在尝试编写一个将输出以下内容的选择查询:
- user1.id, activities: {[activity.id, activity.name], ['activity.id, activity.name]};
- user2.id, activities: {[activity.id, activity.name], ['activity.id, activity.name]};
我知道如何分两步完成,但我有很多用户,为每个用户选择事件很繁重。有没有办法用一个 MySQL 查询来完成它?
最佳答案
使用GROUP_CONCAT
函数和SEPARATOR
选项的解决方案,它可以让您获取特定用户的所有事件:
SELECT u.id, GROUP_CONCAT( a.id, "|", a.name
SEPARATOR ', ' ) AS useractivities
FROM `users` u
INNER JOIN `user_activities` ua ON u.id = ua.user_id
INNER JOIN `activities` a ON a.id = ua.activity_id
GROUP BY u.id
此查询将返回以下状态的结果集:
id | useractivities
------------------------------------
79 | 17|sport
18 | 3|music, 19|outing, 17|sport
.. | ....
然后,在从结果集中获取每一行时,您可以轻松地通过逗号(作为分隔符)分解(拆分)useractivities
字段值,从而获取特定用户的所有事件
关于mysql - SQL 检索数组中的连接数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251203/