Заказать результат на основе данных предложения WHERE IN - PullRequest
4 голосов
/ 11 февраля 2010

Учитывая этот запрос MySQL:

SELECT
  someColumns
FROM
  someTable
WHERE
  someColumn IN ( value1, value2, value3 )

... как я могу гарантировать, что набор строк выходит упорядоченным в точном порядке значений, указанных в предложении IN ()? Я полагаю, что это не гарантируется без указания условия ORDER BY, не так ли?

PS:.
Значения в предложении IN () будут массивом произвольных данных, передаваемых в запрос PHP (с использованием оператора select Zend Framework) следующим образом:

->where( 'someColumn in (?)', $theArrayWithValues );

Ответы [ 2 ]

9 голосов
/ 11 февраля 2010

Использование оператора CASE в ORDER BY:

ORDER BY CASE someColumn
           WHEN value1 THEN 1
           WHEN value2 THEN 2
           WHEN value3 THEN 3
         END ASC

Назначьте произвольные значения, как вам нравится. Обычно я не включаю ASC в ORDER BY, потому что это подразумевается, если не определено, но я хотел быть явным, если вы хотите в DESC порядке.

1 голос
/ 11 февраля 2010

Нет, порядок не гарантирован, точнее, порядок, в котором выбранные строки появляются в базе данных.

Если вы знаете, что значения будут принадлежать строгому набору, вы можете сделать столбец типом ENUM в нужном вам порядке, а сортировка по этому полю отсортирует по этому порядку.

Один простой способ упорядочить по определенным значениям это:

ORDER BY `someColumn`='value1' DESC, `someColumn`='value2' DESC, ...
...