如何连接按特定顺序连接表中的值,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 |
是的,但实际上我有rel_departments.id对它们进行排序,但道理是一样的,它作品!谢谢! –