powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить предыдущую запись
5 сообщений из 5, страница 1 из 1
Как получить предыдущую запись
    #38734970
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Есть некая таблица, в которой нас интересуют 2 поля:
- ID - уникальный целочисленный идентификатор записи с автоинкрементом
- rank - целочисленное поле, позволяющее задать приоритетную сортировку.

В итоговом запросе сортировка выглядит так:
Код: sql
1.
ORDER BY rank, id DESC


Соответственно, данные сортируются сначала по приоритету (если задан), а в рамках его - по обратному порядку добавлению записей в базу.

В чем собственно вопрос: как, зная ID той или иной записи, получить предыдущую в соответствие с сортировкой, описанной выше?
Поначалу все кажется просто. Рассмотрим 2 варианта результирующих выборок в случае, если приоритет задан и нет, соответственно. Первый столбец - ID, второй - rank. В обоих вариантах возьмем центральную запись: ID=4 и ID=3 соответственно.

Первый вариант: приоритет задан.

2 - 1
1 - 2
4 - 3
5 - 4
3 - 5

Второй вариант: приоритет не заполнен:

5 - 5
4 - 5
3 - 5
2 - 5
1 - 5


Если сделать так:
Код: sql
1.
WHERE rank < [rank]


То во втором случае в выборку не попадет ни одна запись, независимо от сортировки.

Если так:
Код: sql
1.
WHERE rank <= [rank]


То в обоих случаях в выборке записи окажутся, но во втором - как ни сортируй, мы не выйдем на предыдущую запись, т.е. ID=4.

При этом в первом случае, в столбце ID данные могут располагаться абсолютно хаотично, т.е. сортировка по этому полю бессмысленна.

Возможно, все просто решается, но что-то глаз замылился уже.
Плиз, хелп!
...
Рейтинг: 0 / 0
Как получить предыдущую запись
    #38735036
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подзапрос на получение записи с тем же rank, но бОльшим ID, первой при сортировке по ID ASC.
Подзапрос на получение записи с меньшим rank, первой при сортировке по rank DESC, id ASC.
UNION.
Запрос первой записи при сортировке rank DESC.
...
Рейтинг: 0 / 0
Как получить предыдущую запись
    #38735110
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно на примере, если не сложно?
...
Рейтинг: 0 / 0
Как получить предыдущую запись
    #38735122
urukhay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 запроса на получение предыдущей записи!
А если усложнить задачу:
1. Получить предыдущую запись. Если стоим на первой записи таблицы - должна выбраться последняя запись таблицы.
2. Получить следующую запись. Если стоим на последней записи таблицы - должна выбраться первая.

Сколько же запросов тогда будет )) Не буду скрывать - это алгоритм циклического пролистывания фоток при нажатии на кнопки "Назад" и "Вперед". Т.е. когда доходим до последней при пролистывании впереде - показывается первая, потом все заново по кругу.
Когда доходим до первой при пролистывании назад показывается последняя и потом опять все по новой.
...
Рейтинг: 0 / 0
Как получить предыдущую запись
    #38735141
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urukhay4 запроса на получение предыдущей записи!Один. С двумя подзапросами. Ты хоть постарайся понимать, что тебе отвечают, что ли...
urukhayэто алгоритм циклического пролистывания фоток при нажатии на кнопки "Назад" и "Вперед". Т.е. когда доходим до последней при пролистывании впереде - показывается первая, потом все заново по кругу.
Когда доходим до первой при пролистывании назад показывается последняя и потом опять все по новой.Пейджинг. С одной записью на страницу. Решения есть, поиск в помощь.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как получить предыдущую запись
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]