Mysql order by in ()
-
19-09-2019 - |
Вопрос
У меня есть массив PHP с номерами идентификаторов в нем. Эти цифры уже заказаны.
Теперь я хотел бы получить свой результат с помощью метода in (), чтобы получить все идентификаторы.
Тем не менее, эти идентификаторы должны быть заказаны, как в методе.
Например:
IN(4,7,3,8,9)
Должен дать результат как:
4 - Article 4
7 - Article 7
3 - Article 3
8 - Article 8
9 - Article 9
Какие-либо предложения? Может быть, есть функция для этого?
Спасибо!
Решение
Я думаю, вы можете искать функцию ПОЛЕ - Несмотря на то, что обычно рассматривается как строковая функция, она отлично работает и для чисел!
ORDER BY FIELD(field_name, 3,2,5,7,8,1)
Другие советы
Вы могли бы использовать FIELD()
:
ORDER BY FIELD(id, 3,2,5,7,8,1)
Возвращает индекс (положение) Str в списке Str1, Str2, Str3, ... Возвращает 0, если STR не найден.
Это своего рода уродливый хак, поэтому на самом деле используйте его, только если у вас нет другого выбора. Сортировка вывода в вашем приложении может быть лучше.
Стандартный SQL не дает этого способа сделать это (MySQL может, но я предпочитаю решения, которые являются нейтральными поставщиком, чтобы я мог переключать СУБД в любое время).
Это то, что вы должны сделать в пост-обработке после Набор результатов возвращается. SQL может вернуть их только в заказе, указанном в пункте «Порядок» (или в Любые Заказ, если такого пункта нет).
Другая возможность (хотя мне это не нравится, я с честью дать вам выбор)-это совершить несколько поездок в базу данных, по одному для каждого идентификатора и обрабатывать их по мере их появления:
select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.
Вам просто нужно отдать правильный заказ по заявлению.
SELECT ID FROM myTable WHERE ID IN(1,2,3,4) ORDER BY ID
Зачем вам заказать свои данные, как в вашем примере, заказано?
Если вы не возражаете против сознания длинных запросов, попробуйте так:
SELECT ID FROM myTable WHERE ID=1
UNION
SELECT ID FROM myTable WHERE ID=3
UNION
SELECT ID FROM myTable WHERE ID=2