В таблице mysql db у меня есть все страны:
и я выбрал все страны как:
SELECT * FROM countries_table ORDER BY country_name
но я хочу показать некоторые конкретные страны в верхней части списка:
а затем другие появятся в ORDER BY country_name
Может ли это быть разрешено MYSQL и / или PHP и как?
Существует простой и малоизвестный трюк MySQL:
SELECT * FROM countries_table ORDER BY name = 'Australia' desc, name = 'UAE' desc, name = 'Pakistan' desc, name = 'UK' desc, name = 'USA' desc, name asc;
Использовать FIELD
SELECT country_id, country_name FROM countries_table ORDER BY FIELD(country_name, 'USA', 'UK', 'Pakistan', 'UAE', 'Australia') DESC, country_name ASC
EDITED: спасибо за комментарий mvf
Это должно работать:
SELECT country_id, country_name FROM countries_table ORDER BY (CASE country_name WHEN 'Australia' THEN '1' WHEN 'UAE' THEN '2' ... ELSE country_name END) ASC;
Другой способ сделать это, используя UNION
:
(SELECT * FROM countries_table WHERE name IN('Australia', 'UAE', 'Pakistan', 'UK', 'USA') ORDER BY name ASC) UNION (SELECT * FROM countries_table WHERE name NOT IN('Australia', 'UAE', 'Pakistan', 'UK', 'USA') ORDER BY name ASC)
Документация: UNION