День добрый господа! Имеем PDO, запрос Код (Text): SELECT * FROM table WHERE id IN (8,5,12,4) Беда вот в чем, этот запрос вернет строки из БД в таком порядке 4,5,8,12 А никак нельзя вернуть в том порядке в котором я их перечисляю в IN? Вопрос связан вот с чем. Массив айдишников получается сфинском в результате сортировки ORDER BY, соответственно мне и надо получить записи именно в том порядке в котором сфинкс мне предлагает. Сортировать пыхом или PDO не предлагать! )
тут не надо сортировать, у тебя есть массив 8,5,12,4 в нужной сортировки и результат 4,5,8,12 пройдись foreach по 8,5,12,4 и выведи из 4,5,8,12 данные, вот и будет вывод в нужной сортировке
Код (Text): SELECT * FROM `map_castle` WHERE ID IN(4,1,5,3) ORDER BY ID = 4 DESC, ID = 1 DESC, ID = 5 DESC, ID = 3 DESC Надо другой вариант...
Ну.....вариант конечно, но получится 2 обхода и в итоге надо собрать еще один результирующий массив, а данных там много ((( Спасибо за наводку...но это не работает ((( Код (Text): SELECT * FROM `table` WHERE `id` IN (4908534, 4906820, 5579047) ORDER BY FIND_IN_SET(id, '4908534, 4906820, 5579047') Вернуло 5579047,4906820,4908534, т.е. с точностью до наоборот (
что с моим вариантом ты два раза циклом пройдёшь, что с данными которые уже отсортированы из базы, тебе просто из базы надо сразу все данные получить в массив, а не перебирать их по строчке и в новый массив копировать. Тебе потом вывод этих данных делать или массив отправить куда-то? --- Добавлено --- Может там к ORDER BY нужно добавить ASC или DESC
Вобщем хуйня все это (((( PHP: usort($array, function ($a,$b) { return $a['field'] > $b['field'];}); // по возрастанию usort($array, function ($a,$b) { return $a['field'] < $b['field'];}); // по убыванию работает куда быстрее чем выборка через ORDER BY FIELD PHP наше все )))
ухтыжептамытутголовуломать --- Добавлено --- а если массив из несколько сотен строк? unsort быстрее чем FIELD ?
не замерял, у меня фикс 20 элементов, ни них usort быстрее Ну мозги чуть растрясли в обед ) Спасибо всем!
Код (Text): select * from table where id=8 union select * from table where id=5 union select * from table where id=12 union select * from table where id=4
Это же, надо пройтись циклом для запихивания каждого id в каждый запрос, после имплодить ( 'union', array ), жиза
Так и сделал ) ОФФТОП Заметил странную фишку у сфинкса...он по дефолту выбирает 20 позиций увеличиваю лимиты LIMIT 1000000 OPTION max_matches=1000000 Что на ляме позиций, что на 50 тысяч время работы почти одинаковое.....что за нах пока не пойму )