Есть таблица, в списке полей есть айдишник и текстовое поле.
Путем довольно сложных обсчетов в пхп получается массив айдишников, отсортированный в нужном порядке.
Запрос:
SELECT word FROM table WHERE id IN(".implode(",",$idz).")отдает строки не в том порядке, в котором собраны айдишники...
Как бы получить строки именно в той последовательности, которая задана в массиве айдишников?
Или няхай что в массиве несколько тысяч элементов, запустить в цикле по айдишникам запрос по одной строке? Но как-то не хочется без нужды дергать базу тысячами запросов...
Спустя 5 минут, 14 секунд (11.09.2010 - 01:00) waldicom написал(а):
Есть тупой способ, но он должен работать.
Что-то типа
SELECT word FROM table WHERE id IN(".implode(",",$idz).") ORDER BY implode(",",$idz)
К сожалению не могу сказать, насколько он быстрый.
Что-то типа
SELECT word FROM table WHERE id IN(".implode(",",$idz).") ORDER BY implode(",",$idz)
К сожалению не могу сказать, насколько он быстрый.
Спустя 14 минут, 1 секунда (11.09.2010 - 01:14) FatCat написал(а):
waldicom
Не понял синтаксис...
Другие варианты синтаксиса кроме IN() - ошибка.
Не понял синтаксис...
SELECT * FROM `words` WHERE id IN(1,8,4,6) ORDER BY id IN(1,8,4,6)отдает в порядке 1,4,6,8.
Другие варианты синтаксиса кроме IN() - ошибка.
Спустя 3 минуты, 11 секунд (11.09.2010 - 01:17) waldicom написал(а):
ORDER BY (1,8,4,6)
так не идет? ща посмотрю сам
так не идет? ща посмотрю сам
Спустя 3 минуты, 48 секунд (11.09.2010 - 01:21) waldicom написал(а):
Нет, так нельзя.
Но вот Nikitian написал, как можно
Но вот Nikitian написал, как можно
Select * from table where field1 in (10,50,100,25,1,2,1000) order by field(field1,10,50,100,25,1,2,1000)
Спустя 24 минуты, 29 секунд (11.09.2010 - 01:45) FatCat написал(а):
Ага, спасибо! Получилось.
Причем не вижу уменьшения скорости. Супер!
Причем не вижу уменьшения скорости. Супер!
_____________
Бесплатному сыру в дырки не заглядывают...