MySQL указывает произвольный порядок по id - PullRequest
10 голосов
/ 01 декабря 2010

Можно ли указать произвольный порядок для оператора MySQL SELECT?Например,

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);

Порядок чисел, перечисленных непосредственно после IN, не имеет значения.

Ответы [ 3 ]

13 голосов
/ 01 декабря 2010

Функция FIND_IN_SET сделает свое дело

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY FIND_IN_SET(id, '1,3,2,9,7');

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

РЕДАКТИРОВАТЬ: Обратите внимание на отсутствие пробелов в строковом аргументе функции find_in_set.

5 голосов
/ 01 декабря 2010

Проверьте mysql's ЗАКАЗАТЬ ПОЛЕ . Я думаю, что это будет делать именно то, что вы хотите.

1 голос
/ 01 декабря 2010

Простой ответ:

Снабдите свои данные другим полем int "ordering", а затем ORDER BY этим полем. Это должно быть все, что нужно в большинстве случаев. Я успешно сделал это, когда клиенты могут добавлять определенные продукты в список избранных и т. Д., Применяя низкие значения, такие как -1 или -99, в поле заказа.

Комплексный ответ:

Это применимо, если вы хотите нормализовать этот порядок, и, если, возможно, у вас есть другое поле в качестве второго фактора в порядке, это уже есть в вашей основной таблице. Это также поможет, если у вас есть другая информация, связанная с каждым пунктом заказа, например заметка. Или, если множество таблиц будет реализовывать этот произвольный порядок, и вы хотите организовать / изменить этот порядок из одного места.

Что бы вы сделали, это разместили «произвольный» порядок в таблице, к которой вы можете присоединиться, а затем упорядочили по этому полю:

SELECT t.*, o.ordering
FROM table_name AS t
LEFT JOIN table_name_ordering AS o ON t.ordering_id = o.id
ORDER BY o.ordering, t.other_field
...