Можно ли указать произвольный порядок для оператора MySQL SELECT
? Например.,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
Порядок чисел, перечисленных непосредственно после IN
, кажется, не имеет значения.
Можно ли указать произвольный порядок для оператора MySQL SELECT
? Например.,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
Порядок чисел, перечисленных непосредственно после IN
, кажется, не имеет значения.
Функция 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.
Ознакомьтесь с разделом mysql ПО ПОЛЯМ. Я думаю, он сделает именно то, что вы хотите.
ORDER BY FIELD(id,1,3,2,9,7)
- person Ciantic; 16.12.2011
Простой ответ:
Инструментируйте свои данные с помощью другого поля 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
1,3,2,9,7
, просто загрузите результаты для1,2,3,9,7
и установите его на основе порядка1,3,2,9,7
. Любой указанный язык программирования? - person ajreal   schedule 01.12.2010find_in_set
не быстрый и не очень оптимизированный. Делать это на PHP быстрее и оптимизированнее. - person ajreal   schedule 01.12.2010