如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?

Posted

技术标签:

【中文标题】如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?【英文标题】:How to GROUP_CONCAT column order by where in (multiple values)? 【发布时间】:2019-08-17 22:38:59 【问题描述】:

下面给出的我在mysql中的代码是

 select GROUP_CONCAT(table_name,'.',column_name,'  as',table_name,'_',column_name) as column_list from INFORMATION_SCHEMA.COLUMNS where table_name in ('country_details','state_details', 'city_details');

我得到下面给出的结果,以 city_details.id 作为 city_details_id,..

结果(从city_details,country_details,state_details开始)

city_details.id 作为city_details_id,city_details.city_name 作为city_details_city_name,city_details.state_id 作为city_details_state_id,country_details.id 作为country_details_id,country_details.sortname 作为country_details_sortname,country_details.country_name 作为country_details_country_name,country_details.phonecode 作为country_detail , state_details.state_name 作为 state_details_state_name, state_details.country_id 作为 state_details_country_id

预期结果(开始于 country_details,state_details,city_details

country_details.id 作为 country_details_id,country_details.sortname 作为 country_details_sortname,country_details.country_name 作为 country_details_country_name, country_details.phonecode 作为 country_details_phonecode,state_details.id 作为 state_details_id,state_details.state_name 作为 state_details_state_name, state_details.country_id 作为 state_details_country_id,city_details.id 作为 city_details_id,city_details.city_name 作为 city_details_city_name, city_details.state_id 为 city_details_state_id

我不知道如何解决这个问题,所以请任何人指导我解决这个问题。

这里我使用了下面给出的 Order by Field 代码,它也给出了同样的问题。

SELECT group_concat(table_name,'.',column_name,' as  ',table_name,'_',column_name) as column_list  FROM INFORMATION_SCHEMA.COLUMNS where table_name in ('country_details','state_details', 'city_details')ORDER BY FIELD(table_name,'country_details','state_details', 'city_details');

【问题讨论】:

你试过MySQL FIELD函数吗? 【参考方案1】:

查询末尾的 ORDER BY 什么都不做,因为您的查询只包含一个结果行。 (任何具有 COUNT 或 GROUP_CONCAT 等聚合函数的查询将只包含一行,除非该查询具有 GROUP BY 子句。)

不过,您可以将 ORDER BY 放在 GROUP_CONCAT 聚合函数中。像这样:

SELECT GROUP_CONCAT(
             table_name,'.',column_name,' as  ',table_name,'_',COLUMN_NAME 
             ORDER BY FIELD(table_name,'country_details','state_details', 'city_details'), 
                      ordinal_position 
       ) AS column_list
  FROM INFORMATION_SCHEMA.columns
 WHERE table_name IN ('country_details','state_details', 'city_details')

(使用 ordinal_position 进行排序将每个表的列按照它们在表定义中出现的顺序排列。)

【讨论】:

以上是关于如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony2 中按多个值对数据库中的记录进行排序

CouchDB - 按位置对文档进行排序

按数组中的多个属性对对象进行分组,然后将它们的值相加

如何按名称对具有匹配元素的值进行排序?

对list中的多个map按某个属性的值排序,null值放到最后

Hashtable一个键多个值 在遍历怎么做啊