Облазил интернет, но подходящего решения не нашел.
Примерная задача: есть сайт с обоями на рабочий стол. На странице со списком всех обой делается примерно такой запрос:
SELECT * FROM images WHERE image_deleted = 0 ORDER BY image_upload_time ASC;
Пользователь может делать сортировку и выборку по различным параметрам, например, может отсортировать по рейтингу и т. д., соответственно каждый раз получается новый набор изображений.
Дальше пользователь, когда сделает свою выборку и сортировку, может перейти на страницу какого-то изображения. Выполняется sql запрос:
SELECT * FROM images WHERE image_id = 100;
Вопрос: нужно каким-то образом сказать пользователю, что он просматривает изображение номер 40 из 300 возможных по его выборке. Определить количество — не проблема, а вот с порядковым номером почему-то не могу разобраться…
Также есть похожий вопрос: нужно как-то определять id предыдущего и следующего изображений в текущей выборке, то есть сделать кнопки вперед и назад.
Сервер баз данных — mysql. Заранее спасибо за советы!
Повторное описание задачи не отменяет необходимости читать вами решения =)
Но я разжую, мне не сложно.
---------
index.php:
select* from images order by rating
$i=1;
foreach…
echo «img.php?id=$id&indexInQuery=$i&orderBy=rating&prev=$prev&....»;
$prev=$id;
$i++;
---------
img.php
$prev = (int)$_GET['prev'];
$index = (int)$_GET['indexInQuery'];
---------
Затискать «след» тоже довольно просто, и вам не придется вычислять эти значения в дальнейшем.
Прошу прощения, изначально не совсем понял Ваш ответ.
Решение хорошее, я им даже пользовался в какой-то момент, но есть некоторые его особенности: если человек приходит не со страницы со всеми картинками, следовательно в get параметрах нет указания на предыдущее и следующее изображения.
Поэтому мне нужно при каждом открытии страницы с изображением просчитывать его номер и предыдущее/следующее изображение.
"его особенности: если человек приходит не со страницы со всеми картинками, следовательно в get параметрах нет указания на предыдущее и следующее изображения."(с)
Значит он пришел не из поиска с сортировкой, и для него нет понятий «предыдущее» или «следующее». зачем вам делать выборки? Если я пришел с поиска гугл-то как вы узнаёте — какая у меня была сортировка?)
Если Вы пришли с гугла, значит у Вас сортировка по умолчанию (по дате добавления) и показываются все изображения и предыдущее/следующее изображение все равно существует.
всегда казалось, что при подобном виде сортировки можно пользоваться значениями id, которые auto_increment ;) а сделать пару запросов с limit 1 не критично.
А Юнионы не пробовали?
SELECT (
SELECT * FROM table WHERE id = 1 ORDER BY… LIMIT 1
UNION
SELECT * FROM table WHERE id > 1 ORDER BY… LIMIT 1
UNION
SELECT * FROM table WHERE id < 1 ORDER BY… LIMIT 1
) ORDER BY…