SQL Галерея выборка ID следующего и предыдущего изображения

Lestat

Новичок
SQL Галерея выборка ID следующего и предыдущего изображения

имеется таблица:
PHP:
table images
id, id_album, title, position (используется для сортировки), ...
данные о изображениях могут идти не по порядку. Т.е. может добавить 5 фото в один альбом, 5 в другой, вернутся и добавить еще 3 в первый..

Входные данные: id изображения
Задача:
1. выдать данные текущего ID
2. получить ID предыдущего и следующего изображения с таким же id_album, как у текущего. если изображение последнее, то в качестве следующего получить первое изображение. Если изображение первое, в качстве предыдущего получить последнее.
3. узнать порядковый номер текущего изображения в его альбоме.

Вопрос:
как наиболее грамотно и с минимальным количеством SQL-запросов решить задачу?
 

Lestat

Новичок
можно пример.. не понятно, как вычислить порядковый номер для текущего изображения
 

AmdY

Пью пиво
Команда форума
select * from table where id = ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id < ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id > ? /*дополнительные условия и сортировки*/ limit 1
получашь 3 эллемента, ьтекущая, предыдущая и следующая записи.
 

Lestat

Новичок
Автор оригинала: AmdY
select * from table where id = ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id < ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id > ? /*дополнительные условия и сортировки*/ limit 1
получашь 3 эллемента, ьтекущая, предыдущая и следующая записи.
это понятно.. вопрос в другом, как добиться следующего:
2. получить ID предыдущего и следующего изображения с таким же id_album, как у текущего. Если изображение последнее, то в качестве следующего получить первое изображение. Если изображение первое, в качстве предыдущего получить последнее.
3. узнать порядковый номер текущего изображения в его альбоме.
 

Lestat

Новичок
Автор оригинала: dimagolov
select min(id) where id_album = ?
select max(id) where id_album = ?
:)
ну допустим
можно объеденить
select * from table where id = ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id < ? /*дополнительные условия и сортировки*/ limit 1
union
select * from table where id > ? /*дополнительные условия и сортировки*/ limit 1
и
select min(id) where id_album = ?
select max(id) where id_album = ?

т.е. выбираем предыдущую и следующую, если ее нет, то берем MIN или MAX значение
но как определить текущий ПОРЯДКОВЫЙ номер изображения?
например в альбоме 10 фотографий, необходимо определить, каким по счету является это изображение.
 

Lestat

Новичок
видимо мой мозг разрушен... :(
но я никак понять не могу, как данную задачу можно решить одним, ну или даже 2 запросами..
 

dimagolov

Новичок
SELECT ... WHERE id_album = ? LIMIT N, 3
N выбирая зная общее число в альбоме через select COUNT() ... where id_album = ?, для N > NUM - 3 надо будет делать UNION с LIMIT 0, 1 или LIMIT 0, 2 соответственно
 

Beavis

Banned
Lestat
да выбери все идентификаторы картинок из базы и работай с ними в php... не миллиард же их...
 

prolis

Новичок
если абстрагироваться от id фото и перейти к страницам альбома ($page), то понадобится два запроса:
1. количество фото в альбоме (count)
2. ID фото на странице $page (select id,... limit $page,1)
далее:
если $page=0, то предыдущая страница равна $count
а если $page==$count, то следующая страница равна 0
в иных случаях предыдущие и последующие страницы равны $page+(-)1
 

Alexandre

PHPПенсионер
я бы эту логику реализовал на клиенте а не в БД
1) выбираются все id картинок и
2) определяются предыдущие и последующие изображения относительно текущего
это быстрее чем нагружать БД
 

Lestat

Новичок
Всем спасибо.. я к этому варианту и склонялся, но почему то думал что MySQL это быстрее сожрет и обработает, чем средствами php пробегаться по всем элементам.
 

iceman

говнокодер
2. получить ID предыдущего и следующего изображения с таким же id_album, как у текущего. если изображение последнее, то в качестве следующего получить первое изображение. Если изображение первое, в качстве предыдущего получить последнее.
зачем тебе это?
 

Alexandre

PHPПенсионер
Всем спасибо.. я к этому варианту и склонялся, но почему то думал что MySQL это быстрее сожрет и обработает, чем средствами php пробегаться по всем элементам.
пробежаться по 30 - 100 элементам в пхп - особо процессор не на грузит
да и то - бегать то надо только по тек+1. тек-1
 
Сверху