Используя Datamapper 1.8.1-dev для PHP CodeIgniter, я пытаюсь построить этот запрос, чтобы установить приоритет одного названия страны вверху списка:
Код: Выделить всё
SELECT * FROM countries
ORDER BY CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name
PHP в модели «Моя страна» (которая расширяет Datamapper):
Код: Выделить всё
$countries = new Country();
$countries->order_by("CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name");
$countries->get_iterated();
Вместо этого Datamapper анализирует «CASE» как имя таблицы, создавая следующий запрос с синтаксической ошибкой:
Код: Выделить всё
SELECT * FROM (`countries`)
ORDER BY `CASE` name WHEN 'Australia' THEN 1 ELSE 2 END, `countries`.`name`
Я предполагаю, что случай CASE не обрабатывается, поскольку этот оператор управления потоком был только что добавлен в MySQL 5? Единственная ли у меня альтернатива: либо добавить столбец order_by в таблицу стран, либо использовать функцию сортировки PHP после получения базы данных?
Подробнее здесь:
https://stackoverflow.com/questions/118 ... r-by-claus