mysql - SQL 检索数组中的连接数据

标签 mysql

我有以下数据库结构:

用户:

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/

相关文章:

mysql - 玩转框架 MySQL 和 EBean

mysql - 如何消除查询中的某些值

mysql - MySQL 上的更新触发器不起作用

PHP:安全地将 mySQL 中的字段日期从 'datetime' 转换为 'unix timestamp' 而不会丢失数据

php - 当项目已经存在时更新中间表时出现问题

python - mysqldb编程错误

mysql - 如果 Doctrine 使用 ZF1 和 ZF2 以及 MySql 作为数据库,默认的隔离级别是多少?

mysql - 如何获得每个人本赛季最佳十分的总和?

mysql - 尾随零不进入数据库

mysql - 是否可以将使用不同 WHERE 子句和 LIMIT 的多个 SQL 语句合并到一个语句中?