这是我的数据库结构:
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/