我有以下数据库结构:
用户:
command1 | xargs -ls -lA 2>ls.log | command2 | command3
user_activities:
id
name
活动:
user_id
activity_id
我正在尝试编写一个将输出以下内容的Select查询:
id
name
我知道如何分两步完成,但我有很多用户,每个用户选择的活动很重。有没有办法用一个MySQL查询来做到这一点?
答案 0 :(得分:0)
使用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
字段值,从而获取特定用户的所有活动