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


Автор: Sunvas 24.1.2008, 21:04
Есть БД с ключевым автоинкрементным полем ID. Как, имея на руках ид определенной строки, за минимальное число запросов вытащить ид предыдущей и следущей строки?

Автор: source777 24.1.2008, 22:25
Код

SELECT id FROM blog WHERE id<5 ORDER BY id DESC LIMIT 1;
SELECT id FROM blog WHERE id>5 ORDER BY id LIMIT 1;

Автор: Sunvas 24.1.2008, 22:30
source777, ответ неверный т.к. ИДЫ могут пропускаться ввиду удаления некоторых строк.


Цитата(GeneralElectric @  24.1.2008,  21:39 Найти цитируемый пост)
Подпись вызывает когнитивный диссонанс

Это мешает помочь?

Автор: skyboy 24.1.2008, 22:33
Цитата(Sunvas @  24.1.2008,  21:30 Найти цитируемый пост)
source777, ответ неверный т.к. ИДЫ могут пропускаться ввиду удаления некоторых строк.

интересно, а как "удаление строк" помешает отсортировать строки в выборке по "ИД"?

Автор: Sunvas 25.1.2008, 00:05
Тоже верно.. А можно как-то сделать одним запросом?

Автор: SelenIT 25.1.2008, 01:37
Теоретически можно, но это будет извратно и скорее всего медленнее, чем 2 запроса от source777...

Автор: source777 25.1.2008, 21:58
Цитата(Sunvas @  24.1.2008,  22:30 Найти цитируемый пост)
source777, ответ неверный т.к. ИДЫ могут пропускаться ввиду удаления некоторых строк.
Мда, когнитивный диссонанс вызывает не только подпись... Если бы пропуски id не учитывались, то было бы просто 4 и 6 без всяких запросов, ясно?

Цитата(Sunvas @  25.1.2008,  00:05 Найти цитируемый пост)
А можно как-то сделать одним запросом?

Код

SELECT (SELECT id FROM blog WHERE id<5 ORDER BY id DESC LIMIT 1) as prev, (SELECT id FROM blog WHERE id>5 ORDER BY id LIMIT 1) as next;

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