如何按特定顺序连接 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 |
关于
在这个例子中,我有一个 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 |