select * from t where v = 128+ ( select min(abs(v-128)) from t where v != 128) limit 1;
но опять же, это чисто как упражнение на подзапросы и школьный курс математики. mysql очень прямолинеен и не догадается найти ближайшую по индексу строку. если есть индекс по значению v получится немного быстрее.
по-прежнему лучший запрос уже озвучили во втором сообщении.
Brim.ru, вот именно. Вы видите разницу между Errcode: 17 и Errcode:28 ? Я - да.
Brim.ru, ну код ошибки операционной системы другой. изучайте документацию,а то не дай бог и на вашем сервере такое случится.
- а какая будет ошибка при переполнении /tmp?
например, номер 28 No space left on device
Brim.ru, нет, при переполнении диска будет другая ошибка. нет, join не обязательно использует временный файл. там все тоньше.
да никак. если не сможет - переезжайте. это ведь shared или mysql под вашим управлением?
теоретически вы можете оптимизировать запросы чтобы не использовали сортировку в файл,но очень уж хлопотно получится.
Предлагаете научить вашего хостера бизнесу?
Вариантов масса. 17 ошибка это EEXIST File exists. Вероятно следует почистить каталог /tmp
Или, если у него несколько копий mysql, как-нибудь растащить временные файлы по разным папкам.
В любом случае ошибка не в ваших скриптах
toxic steel, да вы затейник.
select * from t where v = 128+ ( select min(abs(v-128)) from t where v != 128) limit 1;
но опять же, это чисто как упражнение на подзапросы и школьный курс математики. mysql очень прямолинеен и не догадается найти ближайшую по индексу строку. если есть индекс по значению v получится немного быстрее.
по-прежнему лучший запрос уже озвучили во втором сообщении.
select .. where v != 128 order by abs(128-v) limit 1;
Но зачем? это всегда будет тормозить.
maxnebo, терпением? давно поставили?
Подскажу почитать хелп здесь
и здесь
немного подумать и соорудить бб-код