2012-03-23 208 views
12

我有一個請求條件在MySQL GROUP_CONCAT

+--------+-------------+-----+ 
| req_id | req_name | ... | 
+--------+-------------+-----+ 
| 1  | testrequest | ... | 
+--------+-------------+-----+ 

一個MySQL表,並與這些請求票表。

+--------+-----------+----------+ 
| req_id | vote_name | approved | 
+--------+-----------+----------+ 
| 1  | User1  | 1  | 
| 1  | User2  | 1  | 
| 1  | User3  | 1  | 
| 1  | User4  | 0  | 
| 1  | User5  | 0  | 
+--------+-----------+----------+ 

那種觀點我想:

+--------+-------------+---------------------+--------------+ 
| req_id | req_name | approved_by   | rejected_by | 
+--------+-------------+---------------------+--------------+ 
| 1  | testrequest | User1, User2, User3 | User4, User5 | 
+--------+-------------+---------------------+--------------+ 

然而到目前爲止,我只能夠做到這一點:

+--------+-------------+----------+---------------------+ 
| req_id | req_name | approved | by     | 
+--------+-------------+----------+---------------------+ 
| 1  | testrequest | YES  | User1, User2, User3 | 
| 1  | testrequest | NO  | User4, User5  | 
+--------+-------------+----------+---------------------+ 

我使用的查詢:

SELECT requests.req_id, req_name, CASE 
     WHEN approved THEN 'YES' 
     ELSE 'NO' 
     END AS approved, GROUP_CONCAT(vote_name ORDER BY vote_name ASC SEPARATOR ', ') AS by 
FROM requests 
LEFT JOIN votes ON requests.req_id = votes.req_id 
GROUP BY requests.req_id, approved 
ORDER BY requests.req_id DESC; 

所以我的問題是,我怎麼得到2 group_c oncats在同一行中使用不同的值?

非常感謝!

+0

'訂購by'正在與'group_concat' – safarov 2012-03-23 17:38:16

回答

36

試試這個:

select r.req_id, r.req_name, 
    group_concat(if(approved, vote_name, null) separator ', ') approvedBy, 
    group_concat(if(approved, null, vote_name) separator ', ') rejectedBy 
from requests r 
left join votes v on r.req_id = v.req_id 

結果:

+--------+-------------+---------------------+--------------+ 
| REQ_ID | REQ_NAME |  APPROVEDBY  | REJECTEDBY | 
+--------+-------------+---------------------+--------------+ 
|  1 | testrequest | User1, User2, User3 | User4, User5 | 
+--------+-------------+---------------------+--------------+ 
+1

真棒,謝謝!這正是我想要的。 :) – Rapsey 2012-03-23 18:11:02

+1

這是超級有用,謝謝! – 2013-05-11 20:41:32

1

我試圖重新使用另一個查詢中查詢

SELECT req_id, 
    req_name, 
    GROUP_CONCAT(case approved when 'YES' then voted_by else null end SEPARATOR ', ') AS approved_by, 
    GROUP_CONCAT(case approved when 'NO' then voted_by else null end SEPARATOR ', ') AS rejected_by 
FROM 
(
SELECT requests.req_id, req_name, CASE 
    WHEN approved THEN 'YES' 
    ELSE 'NO' 
    END AS approved, 
    GROUP_CONCAT(vote_name ORDER BY vote_name ASC SEPARATOR ', ') AS voted_by 
FROM requests 
LEFT JOIN votes ON requests.req_id = votes.req_id 
GROUP BY requests.req_id, approved 
ORDER BY requests.req_id DESC 
) t 
group by req_id 
+0

感謝您的快速回復!你認爲有可能在不使用子查詢的情況下做到這一點?因爲如果我沒有弄錯,MySQL不允許在查看的FROM子句中使用子查詢。 – Rapsey 2012-03-23 18:04:18

+0

好的。將不得不查看它。 – 2012-03-23 18:13:56