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

How to concatenate values from joined table in specific order, mysql

关于 ,我 运行 解决了连接值排序的问题。

在这个例子中,我有一个 table 的报价,这在这个问题中并不重要,但它是主要的 table:

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 与要约 table

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

当 运行ning 查询以获取串联的部门城市名称时,我得到了结果。然而,这个结果并不顺利。

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

没关系,但我需要对它们进行排序(以这种方式按关系 table 中的 ID 降序排列)这意味着我需要结果(对于第一个报价 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