MySQL ORDER BY IN ()

У меня есть массив PHP с номерами ID в нем. Эти числа уже упорядочены.

Теперь я хотел бы получить свой результат с помощью метода IN (), чтобы получить все идентификаторы.

Однако эти идентификаторы должны быть упорядочены, как в методе IN.

Например:

IN(4,7,3,8,9) 

Должен дать результат, например:

 4 - Article 4 7 - Article 7 3 - Article 3 8 - Article 8 9 - Article 9 

Какие-либо предложения? Может быть, есть функция для этого?

Благодаря!

Я думаю, что вы можете искать функцию FIELD – в то время как обычно считается строковой функцией, она отлично работает и для чисел!

 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, … list. Возвращает 0, если str не найден.

Это своего рода уродливый взломать, так что действительно используйте его только в том случае, если у вас нет другого выбора. Сортировка вывода в приложении может быть лучше.

Стандартный SQL не предоставляет способ сделать это (MySQL может, но я предпочитаю решения, которые нейтральны для поставщиков, поэтому я могу переключать СУБД в любое время).

Это то, что вы должны сделать в пост-обработке после возвращения результирующего набора. SQL может возвращать их только в порядке, указанном в предложении «order by» (или в любом порядке, если нет такого предложения).

Другая возможность (хотя мне это не нравится, я имею честь дать вам выбор) состоит в том, чтобы сделать несколько поездок в базу данных, по одному для каждого идентификатора, и обработать их по мере их поступления:

 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