2012-03-23 2 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     | 
+--------+-------------+----------+---------------------+ 
| 1  | testrequest | YES  | User1, User2, User3 | 
| 1  | testrequest | NO  | User4, User5  | 
+--------+-------------+----------+---------------------+ 

내가 사용하는 쿼리 :

+--------+-------------+---------------------+--------------+ 
| req_id | req_name | approved_by   | rejected_by | 
+--------+-------------+---------------------+--------------+ 
| 1  | testrequest | User1, User2, User3 | 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 다른 값을 가진 같은 행의 온 캣?

고마워요!

+0

'group_concat' – safarov

답변

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

+1

이것은 매우 유용합니다, 감사합니다! –

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

'와 협력 by' 주문 빠른 답변 감사합니다! 하위 쿼리를 사용하지 않고이 작업을 수행 할 수 있다고 생각하십니까? 실수가 아니라면, MySQL은 뷰의 FROM 절에서 서브 쿼리를 허용하지 않기 때문에 .. – Rapsey

+0

아. 그것을 조사해야 할 것입니다. –