2014-01-18 52 views
1

所以這是我的問題。我有3個表在mysql中選擇一個相對結果集作爲數組

enter image description here

case_assign.cfid => case_fields.cfid and case_assign.uid => users.uid

我試圖寫的單個查詢基本上獲取兩個日期之間的所有情況,同時還通過case_assign表和case_assign表選擇每個分配給該個案的人,並通過其中的uid字段獲取名稱用戶表。

現在是挑戰。由於許多人可以被分配到任何一種情況,它將從case_assign中獲取從case_fields獲取的單個行的多行,但該查詢不是基於case_assign的,其case_fields基於這意味着我將得到一個錯誤, MySQL錯誤:太多的字段返回「或類似的東西。

所以我在想,有沒有一種方法可以將從case_assign表獲得的任何一個查詢選擇的行的總數返回到將發送到客戶端的數組中,然後我可以將json.parse()它在客戶端。

感謝

+0

'GROUP_CONCAT(users.fname)'做你想做的事情嗎? – Barmar

回答

1
SELECT cf.cfid, GROUP_CONCAT(u.fname) assignees 
FROM case_fields cf 
LEFT JOIN case_assign ca ON cf.cfid = ca.cfid 
LEFT JOIN users u ON ca.uid = u.uid 
GROUP BY cf.cfid 

這將在assignees創建一個逗號分隔的用戶名列表。您可以將其分解到客戶端應用程序中的一個數組中。

或者您可以使用此查詢:

SELECT cf.cfid, u.fname 
FROM case_fields cf 
LEFT JOIN case_assign ca ON cf.cfid = ca.cfid 
LEFT JOIN users u ON ca.uid = u.uid 
ORDER BY cf.cfid 

然後,當您遍歷結果,檢查當前cfid是一樣的前一個;如果是,則將fname附加到受理人列表中,否則在結果數組中啓動一個新條目。

+0

非常感謝。在此之前根本沒有想過GROUP_CONCAT ...... – Cozzbie