2017-05-14 1 views
0

my last question에 대해서는 조인 된 값을 정렬하는 문제가 발생합니다. 이 예에서 특정 순서로 조인 된 테이블의 값을 연결하는 방법,

, 나는이 질문에 중요하지 않은 이벤트와 테이블이 있지만 기본 테이블입니다 :

Table departments 
---------------------------- 
id name 
---------------------------- 
1 London 
2 Leeds 
3 Manchester 
4 Glasgow 

: 부 도시의 목록

Table offers 
---------------------------- 
id title   price 
---------------------------- 
1 Offer 1 title 300 Eur 
2 Offer 2 title 250 Eur 
3 Offer 3 title 350 Eur 

있다 및 오퍼 테이블이있는 관계 테이블

Table rel_departments 
------------------------ 
id offer_id rel_id 
------------------------ 
1 1   1 
2 1   3 
3 1   2 
4 2   1 
5 3   4 

연결 부서 c를 얻기 위해 쿼리를 실행하는 경우 이름, 나는 결과를 얻었다. 그러나이 결과는 좋은 순서가 아닙니다.

SELECT `offers`.id, 
GROUP_CONCAT(`departments`.`name` SEPARATOR ', ') AS departures 
FROM `offers` 
INNER JOIN `rel_departments` ON (`rel_departments`.`offer_id` = `offers`.id) 
INNER JOIN `departments` ON (`rel_departments`.`rel_id` = `departments`.id) 
GROUP by offers.id 

나는 결과를 얻었다 : I가 (로 될 필요가 의미

id departures 
---------------------------------------- 
1 London, Manchester, Leeds 
2 London 
3 Glasgow 

이 OK입니다,하지만 난 (관계 테이블의 ID로 내림차순 이런 식으로) 그들을 정렬 할 필요가 첫 번째 제안 id) Leeds, Manchester, London

나는 모든 것을 시도했지만 성공하지는 못했다. 어떤 생각?

p.s. HERE은 sqlfiddle 데모입니다

답변

1

GROUP_CONCAT 함수에서 ORDER BY를 사용할 수 있습니다.

쿼리

SELECT `offers`.id, 
GROUP_CONCAT(`departments`.`name` ORDER BY `offers`.id SEPARATOR ', ') AS departures 
FROM `offers` 
INNER JOIN `rel_departments` ON (`rel_departments`.`offer_id` = `offers`.id) 
INNER JOIN `departments` ON (`rel_departments`.`rel_id` = `departments`.id) 
GROUP by offers.id 

결과

| id |    departures | 
|----|---------------------------| 
| 1 | Leeds, Manchester, London | 
| 2 |     London | 
| 3 |     Glasgow | 

데모 http://www.sqlfiddle.com/#!9/ae7201/3

+1

네를 볼 수 있지만, 실제로 나는 rel_departments.id별로 정렬 할 필요가 있지만 논리가 동일과 공장! 감사! –

관련 문제