Подтвердить что ты не робот

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

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

Спасибо!

4b9b3361

Ответ 1

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

ORDER BY FIELD(field_name, 3,2,5,7,8,1)

Ответ 2

Вы можете использовать FIELD():

ORDER BY FIELD(id, 3,2,5,7,8,1)

Возвращает индекс (позицию) str в str1, str2, str3,... list. Возвращает 0, если str не найден.

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

Ответ 3

Стандартный 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.

Ответ 4

Вам просто нужно указать правильный порядок по инструкции.

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