Как упорядочить столбец GROUP_CONCAT по месту в (несколько значений)? - PullRequest
0 голосов
/ 27 марта 2019

Мой код в 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_detail_________________D__ND____________________S_S_S_ND_____________с___________________S_TN , 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 as city_details_state_id

Я не знаю, как решить эту проблему, поэтому, пожалуйста, помогите мне решить эту проблему.

Здесь я использовал код заказа по полю, приведенный ниже, он также вызывает ту же проблему.

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');

1 Ответ

1 голос
/ 27 марта 2019

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 для упорядочения столбцы каждой таблицы располагаются в том же порядке, в котором они указаны в определениях таблиц.)

...