Порядковый номер из выборки SQL

Добрый день!

Облазил интернет, но подходящего решения не нашел.
Примерная задача: есть сайт с обоями на рабочий стол. На странице со списком всех обой делается примерно такой запрос:
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. Заранее спасибо за советы!
  • Вопрос задан
  • 7149 просмотров
Пригласить эксперта
Ответы на вопрос 6
@rPman
Поиграйся так, не идеальное решение но иногда спасает:
SET <hh user=rank>=0;
SELECT <hh user=rank>:=<hh user=rank>+1 AS rank, id FROM menu;
Ответ написан
@Vampiro
Вы же рисуете пользователю эти картинки, проходя циклом по всей выборке. Добавьте в УРЛ нужные данные.
Ответ написан
Gluttton
@Gluttton
Возможно пригодиться: www.sql-tutorial.ru/ru/book_numbering_by_primary_key_values.html.
Ответ написан
Комментировать
gernovich
@gernovich
Если текущее изображение 100

то предыдущее будет:
<code>SELECT * FROM `images` WHERE `image_id` < 100 ORDER BY `image_id` ASC LIMIT 1;</code>

Соответственно следующее
<code>SELECT * FROM `images` WHERE `image_id` > 100 ORDER BY `image_id` DESC LIMIT 1;</code>

И не важно если в колонке image_id есть пропуски
Ответ написан
А Юнионы не пробовали?
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…
Ответ написан
leonid239
@leonid239 Автор вопроса
тут проблема в том, что вот такое вот: «WHERE id < 1» использовать нельзя, так как сортировка идет не по id, а по другим параметрам.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы