如何连接按特定顺序连接表中的值,mysql

问题描述:

关于my last question,我遇到了排序连接值的问题。如何连接按特定顺序连接表中的值,mysql

在这个例子中,我有一个提议是不是在这个问题上重要的一个表,但它是主表:

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

有部门的城市列表:

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

以及与报价表的关系表

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

当运行查询以获得连接部门c ities的名字,我得到了结果。但是,这个结果不是很好。

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 

我得到的结果:

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

这是确定的,但我需要他们进行排序(以这种方式通过关系表ID降序),这意味着我需要的结果是(为第一次报价编号)利兹,曼彻斯特,伦敦

我已经尝试了一切,但没有成功。任何想法?

p.s. HERE是一个sqlfiddle演示

您可以在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对它们进行排序,但道理是一样的,它作品!谢谢! –