php - 将多个记录连接到一行?

标签 php mysql

这是我的数据库结构:

Users {User ID 1}
Roles {For example 2 roles: 1, 2}
User_roles {User ID 1: has Role 1, User ID 1: Has role 2}

由于此查询复制了用户,因此如何使用 join 来获取这两个角色:

SELECT * FROM `users` LEFT JOIN `user_roles` ON (`users`.`id` = `user_roles`.`user_id`)

我想输出一个如下所示的表格:

User ID | Has Role 1 | Has Role 2
--------|------------|-----------
1       |    yes     |    yes

最佳答案

您可以按用户 ID 进行分组。

SELECT 
    `users`.`id`, 
     IF(SUM(`roles`.`id` = 1), 'yes', 'no') AS `Has Role 1`,
     IF(SUM(`roles`.`id` = 2), 'yes', 'no') AS `Has Role 2`
FROM `users` 
LEFT JOIN `user_roles` ON `users`.`id` = `user_roles`.`user_id`
LEFT JOIN `roles` ON `roles`.role_id = `user_roles`.`role_id`
GROUP BY `users`.`id`

如果您只使用角色的 pk,那么您可以省略 LEFT JOIN 角色 by

SELECT 
    `users`.`id`, 
     IF(SUM(`user_roles`.`role_id` = 1), 'yes', 'no') AS `Has Role 1`,
     IF(SUM(`user_roles`.`role_id` = 2), 'yes', 'no') AS `Has Role 2`
FROM `users` 
LEFT JOIN `user_roles` ON `users`.`id` = `user_roles`.`user_id`
GROUP BY `users`.`id`

关于php - 将多个记录连接到一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22474303/

相关文章:

php - 使用 LLVM API 将全局字符串存储在可变变量中

php - 在 PHP 中合并条件循环的第二个总计数查询

php - 检查 LEFT JOINED 查询的行数

php - 商店时间表的数据库架构

php - 相关产品 SQL 查询

php - 正则表达式 - preg_replace 字符串

php - 无法在 PHPStorm 的 IDE 中运行单元测试

php - 使用 +1 | 增加包含文本 + 数字的 DB 值 | WordPress的

php - 检查所有数据,对它们进行计数,按计数排序并返回每个数据之一 bt mysql

php - 在 SQL 中搜索列中的数据行