我需要我的主要查詢與子查詢相結合:梳理這兩個MySQL查詢
當前查詢(工作):
SELECT *,(SELECT SUM(shift_length)FROM overtime_list
WHERE overtime_list.user_ID = users.user_ID AND overtime_list.date > '$totalovertimedays') AS overtime_total FROM availability_list
JOIN users ON users.user_ID = availability_list.user_ID
JOIN stations ON users.station_ID` = stations.station_ID
WHERE availability_list.date = '$date' AND type = '$type'
ORDER BY overtime_total ASC
($日期和$類型都瓦爾填寫通過PHP)
查詢我想插入這個作爲一個子查詢:
SELECT role_ID, GROUP_CONCAT(users_roles.role_ID) AS roles FROM users
JOIN users_roles ON users.user_ID = users_roles.user_ID
GROUP BY users.users_ID
我得到了這麼遠 - 但我不能似乎得到了GROUP BY工作,所以它不正確列出他們:
SELECT *,(SELECT SUM(shift_length)FROM overtime_list
WHERE overtime_list.user_ID = users.user_ID AND overtime_list.date > '$totalovertimedays') AS overtime_total FROM availability_list
JOIN users ON users.user_ID = availability_list.user_ID
JOIN `stations` ON `users`.`station_ID` = `stations`.`station_ID`,
(SELECT role_ID, GROUP_CONCAT(users_roles.role_ID separator ', ') AS roles FROM users JOIN users_roles ON users.user_ID = users_roles.user_ID GROUP BY users.user_ID) AS roles
WHERE availability_list.date = '$date' AND type = '$type'
ORDER BY overtime_total ASC
availability_list表:
+----------+---------+
| user_ID | user |
+----------+---------+
| 1 | Smith |
+----------+---------+
| 2 | Jones |
+----------+---------+
| 3 | Greg |
+----------+---------+
overtime_list表:
+----------+----------------+------------+
| date | shift_length | user_ID |
+----------+----------------+------------+
| 1/1/11 | 5 | 1 |
+----------+---------+------+------------+
| 1/2/11 | 5 | 2 |
+----------+---------+------+------------+
| 1/6/11 | 2 | 2 |
+----------+---------+------+------------+
| 1/8/11 | 5 | 1 |
+----------+---------+------+------------+
| 1/12/11 | 2 | 1 |
+----------+---------+------+------------+
users_roles表:
+----------+---------+
| user_ID | roles |
+----------+---------+
| 1 | Admin |
+----------+---------+
| 2 | Staff |
+----------+---------+
| 2 | Admin |
+----------+---------+
| 2 | Super |
+----------+---------+
| 1 | Other |
+----------+---------+
那麼結果將是:
+----------+---------+----------------------------+------------------+
| user_ID | user | roles | overtime_total |
+----------+---------+----------------------------+------------------+
| 1 | Smith | Admin, Other | 12 |
+----------+---------+----------------------------+------------------+
| 2 | Jones | Staff, Admin, Super | 7 |
+----------+---------+----------------------------+------------------+
| 3 | Greg | | null (or zero) |
+----------+---------+----------------------------+------------------+
當提問這樣的問題時,通常是一個好主意,包括一個例子的形式 - 給出這個數據,我想檢索以下結果。你提出問題越多,答案就越好。 – nnichols 2012-04-09 11:07:44
好的 - 謝謝nnichols - 下次會這麼做 – Laurence 2012-04-09 11:58:45
在同一天的同一個用戶,在同一用戶的overtime_list中是否會有多個條目?我認爲我的查詢將導致來自users_roles和overtime_list的兩個子集的笛卡爾積。 – nnichols 2012-04-09 12:04:07