如何 GROUP_CONCAT 列按 where in (multiple values) 排序?
How to GROUP_CONCAT column order by where in (multiple values)?
下面给出的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_details_phonecode,state_details.id作为 state_details_id,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');
查询末尾的 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 排序将每个 table 的列按照它们在 table 定义中出现的顺序排列。)
下面给出的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_details_phonecode,state_details.id作为 state_details_id,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');
查询末尾的 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 排序将每个 table 的列按照它们在 table 定义中出现的顺序排列。)