Реализация функции: "<< предыдущий следующий >>"

Selforg

Новичок
Реализация функции: "<< предыдущий следующий >>"

Есть таблица товаров отсортированная по алфавиту. Заходим в подробную информацию о продукте там есть навигация: перейти к следующему или предыдущему товару...
Как это реализовать меньшими затратами??

То есть запрос, возращающий все продукты по порядку:
select id, name from products order by name
Результат:

2 Два
1 Один
5 Пять
7 Семь
3 Три
4 Четыре

Допустим нажимаем на "Пять": а в подробной информации запрос просчитывает 1(пред) и 7(след), далее нажимаем "след (7)" будут просчитываеться 5 и 3!!!

Можно ли это просчитать всё в одном запросе?? тоесть найти текущий идентификатор и те что после и до него????
 

Андрейка

Senior pomidor developer
хм.. а ведь интересная задачка - выводить ссылки на следующий предыдущий.. странно, что до этого еще никто не догадался.. и даже на форуме никто не спрашивал.. ты прям первооткрыватель
 

440hz

php.ru
интересно почему такой порядок вывода? надеюсь не потому, что "записи добавляются в базу по мере поступления и сортируются в порядке их добавления в таблицу"


предыдущий:
SELECT id FROM table WHERE id < {$id} ORDER BY id DESC LIMIT 1

следующий: > и ASC

можно сделать UNION для особо одаренных.


-~{}~ 25.12.06 17:33:

ты прям первооткрыватель
ага ... задачка для первокласника.
 

Selforg

Новичок
440hz
сортировка не по идентификаторам....
ты читал вопрос?? или только тему..

-~{}~ 25.12.06 17:41:

440hz
1)
1 Один
5 Пять
7 Семь

1 - предыдущий... 7 - следующий


2)
7 Семь
3 Три
4 Четыре

7 - предыдущий... 4 - следующий
 

440hz

php.ru
ну в общем ORDER BY name или по тому полю, по которому сортируешь.
 

Selforg

Новичок
ага... теперь врубился...

-~{}~ 25.12.06 17:51:

просто хотелось все это воткнуть в один запрос... но повидимому не получится....

-~{}~ 25.12.06 17:51:

хотя можно и в один....
 

Selforg

Новичок
блин... засада...: плохо что надо сравнивать WHERE name < {$name}.... так как передается тока $id.... и нет возможности перенести запрос по выбору name выше данного запроса.... придется городить ещё лишний запрос выборки name.... нехорошо это....
 

Invizz

Новичок
в соседнем топике писал же:
допустим id = 8
[sql]
SELECT * FROM posts
WHERE id<10 LIMIT 3
ORDER BY id DESC
[/sql]

1 ряд - след,
2 ряд - текущ
3 ряд - пред
 

Андрейка

Senior pomidor developer
Invizz
вы живете в идеальном мире, в котором не бывает удаленных idшников, а все данные сортируются строго определенным образом...
 

Фанат

oncle terrible
Команда форума
Можно ли это просчитать всё в одном запросе??
зачем? что за болезнь такая - всё сделать в одном запросе?
А весь сайт целиком в один запрос запихнуть - такая мысль в ваши гениальные головы не приходила?
 

Гравицапа

elbirret elcno
Например, для id = 5 и при сортировке по id
[sql]
select id, name, abs(id-5) as a, sign(id-5) as b from foo order by a asc limit 3;
[/sql]
b = 0 current
b = -1 prev
b = 1 next
 
Сверху