2012-04-13 193 views
1

我有我的數據庫3個表:MySQL - 如何爲每個GROUP BY集返回多個結果?

  1. employee_log
  2. job_log
  3. crew_log

當創建一個新的工作,員工被分配給它,這樣的條目在「crew_log」表中創建。

我想要做的是將每個員工的type = 2屬性(意味着他們是一個主管)(從employee_log)中獲取,然後將crew_log加入到查詢中。

每個員工可以在「crew_log」中擁有多個活動作業,因此目標是將該員工的所有活動作業返回到數組中。

我的查詢到目前爲止是這樣的:

SELECT el.id, cl.job_id 
FROM employee_log AS el 
JOIN crew_log AS cl 
    ON el.id=cl.employee_id 
    AND cl.start_date >= CURDATE() 
WHERE el.type=2 
GROUP BY cl.employee_id 

這當然是不正確的,但也許它會幫助我的可視化問題。當然

我可以這樣做的另一種方式...但我試圖做的一切是針對性能一個SQL查詢和學習新的東西有關SQL :)

另一種方法是,我用兩個while循環..第一個循環將獲得每個員工type = 2,然後在該循​​環中,我將執行另一個SQL查詢以獲取該員工的所有活動作業。

必須有更好的方法來做到這一點?

+0

請將三個表格的結構添加到您的問題中。 – nnichols 2012-04-13 00:39:57

+0

我自己沒有得到要求。可能會添加一些來自表格的示例數據(我猜'job_log'不需要),並且以表格格式顯示預期結果會有所幫助。 – 2012-04-13 01:33:44

回答

1

您的查詢看起來正確,因爲您不需要GROUP BY,因爲您沒有任何聚合函數(SUM(), COUNT(), AVG())將其替換爲ORDER BY以對員工ID進行排序。

SELECT el.id, cl.job_id 
FROM 
    employee_log AS el 
    LEFT JOIN crew_log AS cl 
    ON el.id=cl.employee_id 
WHERE 
    el.type=2 
    AND cl.start_date >= CURDATE() 
ORDER BY el.id 

我也換成你JOINLEFT JOIN讓誰在crew_log沒有記錄的員工沒有從查詢中排除。