MySQL ORDER BY IN()
у меня есть PHP-массив с номерами в нем. Эти номера уже заказаны.
теперь я хотел бы получить свой результат с помощью метода IN (), чтобы получить все идентификаторы.
однако эти идентификаторы должны быть упорядочены, как в методе IN.
например:
IN(4,7,3,8,9)
должен дать результат, как:
4 - Article 4
7 - Article 7
3 - Article 3
8 - Article 8
9 - Article 9
какие предложения? Может есть функция для этого?
спасибо!
4 ответа:
Я думаю, что вы можете искать функцию поле -- хотя обычно считается Строковой функцией,она отлично работает и для чисел!
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 может возвращать их только в порядке, указанном в предложении "order by" (или в любой заказ, если нет такого пункта).
другая возможность (хотя мне это не нравится, я с честью обязан дать вам choice) - это сделать несколько поездок в базу данных, по одному для каждого идентификатора, и обрабатывать их по мере их поступления:
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