У меня есть массив 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