此查询产生正确答案:
SELECT users.*,
SUM(overtime_list.shift_length) AS overtime_total,
(SELECT GROUP_CONCAT(users_roles.role_ID) FROM users_roles WHERE users.user_ID = users_roles.user_ID) AS roles
FROM availability_list
INNER JOIN users
ON users.user_ID = availability_list.user_ID
INNER JOIN stations
ON users.station_ID = stations.station_ID
INNER JOIN overtime_list
ON overtime_list.user_ID = users.user_ID
AND overtime_list.date >= '$totalovertimedays'
WHERE availability_list.date = '$date'
AND availability_list.type = '$type'
GROUP BY users.user_ID
ORDER BY overtime_total ASC
输出:
+----------+---------+----------------------------+------------------+
| user_ID | user | roles | overtime_total |
+----------+---------+----------------------------+------------------+
| 1 | Smith | 1,2 | 12 |
+----------+---------+----------------------------+------------------+
| 2 | Jones | 1,2,3 | 7 |
+----------+---------+----------------------------+------------------+
这是期望的结果:
+----------+---------+----------------------------+------------------+
| user_ID | user | roles | overtime_total |
+----------+---------+----------------------------+------------------+
| 1 | Smith | Admin, Staff | 12 |
+----------+---------+----------------------------+------------------+
| 2 | Jones | Admin, Staff, Other | 7 |
+----------+---------+----------------------------+------------------+
这是我可以使用的连接,它似乎允许 group_concat 更正连接“管理员、员工、其他” - 但我不知道如何将它合并到上面的主查询中?
SELECT users.user_id, GROUP_CONCAT(roles.short_name separator ', ') roles
FROM users
JOIN users_roles ON users.user_ID = users_roles.user_ID
JOIN roles ON users_roles.role_ID= users_roles.role_ID
GROUP BY users.user_ID
users_roles 表:
+----------+---------+
| user_ID | role_ID |
+----------+---------+
| 1 | 1 |
+----------+---------+
| 2 | 1 |
+----------+---------+
| 2 | 2 |
+----------+---------+
| 2 | 3 |
+----------+---------+
| 1 | 3 |
+----------+---------+
角色表:
+----------+------------+
| role_ID | short_name |
+----------+------------+
| 1 | Admin |
+----------+------------+
| 2 | Super |
+----------+------------+
| 3 | Other |
+----------+------------+