Выбор двух ближайших значений ...

[test]

Guest
Выбор двух ближайших значений ...

Довольно часто встречается, что требуется сделать кнопочки "вперед" "назад".
Обычно получаю необходимый мне раздел (фото, статью, новость) так

SELECT * FROM `my_table` WHERE `id` = '<asked_id>'
поле `id` уникальное автоинкрементное.

Хочу получить номера для прошлого раздела и следующего, это актуально если учесть, что `id` может быть не попорядку.

Пока решается в 2 дополнительных запроса.
А можно как-либо получить все 3 значения (или 2 или 1, если нет ближайших) за один запрос ?
 

Demiurg

Guest
SELECT * FROM `my_table` WHERE `id` > '<asked_id>' limit 1 работает быстрее, чем один сложный запрос.
 

[test]

Guest
Demiurg
Получается 3 запроса
WHERE `id` = '<asked_id>' LIMIT 1
WHERE `id` > '<asked_id>' LIMIT 1
WHERE `id` < '<asked_id>' ORDER BY `id ` DESC LIMIT 1

Неужели быстрее ?

И запросы как правило двойные, скажем для простой фотогалереи уточняюшие запросы идут еще с
WHERE `id` < '<asked_id>' AND `section` = '<section_id>' ORDER BY `id ` DESC LIMIT 1


Нет, я не прав ? Не стоит боятся большого количества простых запросов ?
 

slach

Новичок
для MySQL не стоит
особенно если запросы действительно простые...
 

ForJest

- свежая кровь
А тебе вообще требуется скорость?
Вообще почитай разделы Оптимизация в мане по MySQL и статью на detail.phpclub.net - всё тебе станет ясно.
 

[test]

Guest
ForJest
эммм ... прочитал. правда ответа на свой вопрос не получил.
Может не так понял ?
 
Сверху