Ответ 1
Я думаю, что вы можете искать функцию FIELD - в то время как обычно считается строковой функцией, она отлично работает для чисел, тоже!
ORDER BY FIELD(field_name, 3,2,5,7,8,1)
У меня есть массив 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