Cette requête produit la bonne réponse:Combiner ces deux requêtes Mysql
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
sortie:
+----------+---------+----------------------------+------------------+
| user_ID | user | roles | overtime_total |
+----------+---------+----------------------------+------------------+
| 1 | Smith | 1,2 | 12 |
+----------+---------+----------------------------+------------------+
| 2 | Jones | 1,2,3 | 7 |
+----------+---------+----------------------------+------------------+
Ceci est le résultat souhaité:
+----------+---------+----------------------------+------------------+
| user_ID | user | roles | overtime_total |
+----------+---------+----------------------------+------------------+
| 1 | Smith | Admin, Staff | 12 |
+----------+---------+----------------------------+------------------+
| 2 | Jones | Admin, Staff, Other | 7 |
+----------+---------+----------------------------+------------------+
Ceci est une jointure que je peux utiliser, ce qui semble permettre à group_concat de corriger la jointure "admin, staff, other" - mais je ne sais pas comment l'incorporer dans la requête principale ci-dessus?
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
La table users_roles:
+----------+---------+
| user_ID | role_ID |
+----------+---------+
| 1 | 1 |
+----------+---------+
| 2 | 1 |
+----------+---------+
| 2 | 2 |
+----------+---------+
| 2 | 3 |
+----------+---------+
| 1 | 3 |
+----------+---------+
Le tableau des rôles:
+----------+------------+
| role_ID | short_name |
+----------+------------+
| 1 | Admin |
+----------+------------+
| 2 | Super |
+----------+------------+
| 3 | Other |
+----------+------------+
Salut Marco - ça ne marche pas? "Colonne inconnue 'user_roles.role_ID' dans 'on clause'"? La réponse ci-dessus "fonctionne", mais elle est vraiment lente pour une raison ou une autre - j'essaie de faire fonctionner la vôtre ... – Laurence
@Laurencei Changez-le en users_roles.role_id. –
OUI !!!!!!!!!!!!!!!!!! Merci à vous deux!!!!!!!!!!!!!!!!!!!!!!!! + rep si je pouvais !!!!!!!!!!!!! M'a sauvé tellement de maux de tête! – Laurence