【问题标题】:How to concatenate values from joined table in specific order, mysql如何以特定顺序连接连接表中的值,mysql
【发布时间】:2017-05-14 15:57:25
【问题描述】:

关于my last question,我遇到了排序连接值的问题。

在这个例子中,我有一个表,其中包含在这个问题中不重要的报价,但它是主表:

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)Leeds、Manchester、London

我已经尝试了一切,但没有成功。有什么想法吗?

附言HERE 是一个 sqlfiddle 演示

【问题讨论】:

    标签: mysql sql-order-by group-concat


    【解决方案1】:

    您可以在 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

    【讨论】:

    • 是的,但实际上我必须按 rel_departments.id 对它们进行排序,但逻辑是相同的,并且有效!谢谢!
    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多