2010-12-01 2 views
8

Можно ли указать произвольный порядок для инструкции MySQL SELECT? НАПРИМЕР,MySQL задает произвольный порядок по id

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

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

+0

@MattDiPasquale - У вас уже есть заказ в `1,3,2,9,7`, просто загрузите результаты для` 1,2,3,9,7` и установите его на основе порядка `1 , 3,2,9,7`. Любой язык программирования? – ajreal 2010-12-01 17:36:10

+0

Я использую WordPress, PHP. Я хотел бы сделать все это в MySQL, так что мне не нужно выполнять какую-либо обработку на PHP. – ma11hew28 2010-12-01 18:03:20

+0

@MattDiPasquale - `find_in_set` не быстрый и не очень оптимизированный. Сделать это на PHP быстрее и оптимизировано. – ajreal 2010-12-01 18:08:00

ответ

0

Легкий ответ:

инструмент данные с другим "упорядочивание" Int поле, а затем 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 
4

Заканчивать в MySQL ORDER BY FIELD. Я думаю, что он будет делать именно то, что вы хотите.

Смежные вопросы