Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > IN и сортировка


Автор: pd107 15.7.2009, 12:34
Код

SELECT * FROM table WHERE id IN (123, 1, 2, 3)

Можно ли как-то сделать, чтоб результаты селектились в такой последовательности, в какой они перечислены в IN? А то они отдаются отсортированными по возрастанию, что мне не надо.

Автор: ksnk 15.7.2009, 16:12
Код

SELECT * 
FROM table
WHERE  `id` 
IN ( 123, 1, 2, 3 ) 
ORDER BY FIELD(  `id` , 123, 1, 2, 3 ) 

Автор: pd107 15.7.2009, 16:39
ksnk, tnx smile
Другого метода нет? Там очень длинный список IN, лучше буду средствами PHP сортировать. Кстати, насколько длинные запросы вообще можно создавать?

Автор: ksnk 15.7.2009, 17:08
pd107, Ограничение, вроде, есть! Не более 64 кб строка запроса sql. Действительно настолько длинный запрос?  smile 

Автор: solenko 15.7.2009, 18:05
Ну не 64Кб, а сколько в конфиге написано...
http://dev.mysql.com/doc/mysql/en/packet-too-large.html

Автор: Ипатьев 15.7.2009, 18:55
если очень длинный список, то следует подумать о пересмотре архитектуры.

Автор: pd107 15.7.2009, 19:46
ksnk, solenko, благодарю! max_allowed_packet поглядел, 16М smile 
там передаются 6-ти значные числа, сейчас порядка сотни на запрос, в перспективе, в отдельных случаях может доходить до 10к за запрос итого, с учетом запятых 10к*(5+1) = вложимся в даже стандартные 64к smile это не очень хорошо, но что поделаешь... по-другому тут не выйдет, иначе вместо каждой такой записи в специальной таблице в перспективе придется хранить по 10к записей, запрос будет короткий, но иметь под сотню миллионов строк в таблице... smile туда вообще столько хоть влезит? smile  smile 

Автор: Ипатьев 16.7.2009, 08:40
влезет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)