繁体   English   中英

如何以特定顺序从MySQL连接表中的值

[英]How to concatenate values from joined table in specific order, 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

运行查询以获取串联的部门城市名称时,得到了结果。 但是,此结果的顺序不佳。

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降序排列),这意味着我需要结果(对于第一个报价id)是利兹,曼彻斯特,伦敦

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

ps 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM