Цель такая...
Есть таблица с странами..
id name
1 RUS
2 JPN
3. MEX
4. USA
5. KZ
6. UKR
Мне надо вывести все эти страны с условием: 1) сначало идет USA, 2) Потом RUS 3) А потом все оставльное..
ПС. предлагать еще одно поле для сортировки не прокатывает. надо сделать в одном SQL запросе.
с UNION чтото не прокатывает(
"SELECT * FROM country WHERE id = {ID_EUROPE}
UNION
SELECT * FROM country WHERE id = {ID_USA}
UNION
SELECT * FROM country WHERE id = {ID_RUSSIA}
UNION
SELECT * FROM country WHERE id NOT IN ({ID_EUROPE}, {ID_USA}, {ID_RUSSIA}) ORDER BY `name` ASC;"
это пример!
SQL прокатывает, но результата нужного нету(
И понятно почему
Дело в том, что ORDER BY выполняется после того как UNION построит одну таблицу из всех подзапросов SELECT. Т.е. сперва делаются все SELECT'ы, затем они склеиваются в одну псевдотаблицу, а затем уже к этой таблице применяется ORDER BY.
Не знаю, может я спросонья, но очевидного красивого решения вашей задачи я не вижу. Проще самому приложению выполнить два SELECT'а вместо одного и вывести друг за другом, чем заморачиваться какими-то невероятными конструкциями. А самым простым способом было бы занесение name в таблицу уже по условиям нужной сортировки и тогда уже делать ORDER BY по id, т.е.
id name
100 USA
200 RUS
300 JPN
400 KZ
500 MEX
600 UKR
оставляя номера между скажем 200 и 300 для стран, которые могут быть вставлены между 200 и 300 по результатам сортировки имени. Но я понимаю, что конечно такое не всегда возможно по логике работы приложения.
как вариант SELECT ID, NAME
как вариант
в итоге просто сделал два
в итоге просто сделал два селекта и не парился. спасибо!