|
|
|
Как получить предыдущую запись
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть некая таблица, в которой нас интересуют 2 поля: - ID - уникальный целочисленный идентификатор записи с автоинкрементом - rank - целочисленное поле, позволяющее задать приоритетную сортировку. В итоговом запросе сортировка выглядит так: Код: sql 1. Соответственно, данные сортируются сначала по приоритету (если задан), а в рамках его - по обратному порядку добавлению записей в базу. В чем собственно вопрос: как, зная 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. То во втором случае в выборку не попадет ни одна запись, независимо от сортировки. Если так: Код: sql 1. То в обоих случаях в выборке записи окажутся, но во втором - как ни сортируй, мы не выйдем на предыдущую запись, т.е. ID=4. При этом в первом случае, в столбце ID данные могут располагаться абсолютно хаотично, т.е. сортировка по этому полю бессмысленна. Возможно, все просто решается, но что-то глаз замылился уже. Плиз, хелп! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 14:32:52 |
|
||
|
Как получить предыдущую запись
|
|||
|---|---|---|---|
|
#18+
Подзапрос на получение записи с тем же rank, но бОльшим ID, первой при сортировке по ID ASC. Подзапрос на получение записи с меньшим rank, первой при сортировке по rank DESC, id ASC. UNION. Запрос первой записи при сортировке rank DESC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 15:11:01 |
|
||
|
Как получить предыдущую запись
|
|||
|---|---|---|---|
|
#18+
А можно на примере, если не сложно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 15:47:56 |
|
||
|
Как получить предыдущую запись
|
|||
|---|---|---|---|
|
#18+
4 запроса на получение предыдущей записи! А если усложнить задачу: 1. Получить предыдущую запись. Если стоим на первой записи таблицы - должна выбраться последняя запись таблицы. 2. Получить следующую запись. Если стоим на последней записи таблицы - должна выбраться первая. Сколько же запросов тогда будет )) Не буду скрывать - это алгоритм циклического пролистывания фоток при нажатии на кнопки "Назад" и "Вперед". Т.е. когда доходим до последней при пролистывании впереде - показывается первая, потом все заново по кругу. Когда доходим до первой при пролистывании назад показывается последняя и потом опять все по новой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 15:53:53 |
|
||
|
Как получить предыдущую запись
|
|||
|---|---|---|---|
|
#18+
urukhay4 запроса на получение предыдущей записи!Один. С двумя подзапросами. Ты хоть постарайся понимать, что тебе отвечают, что ли... urukhayэто алгоритм циклического пролистывания фоток при нажатии на кнопки "Назад" и "Вперед". Т.е. когда доходим до последней при пролистывании впереде - показывается первая, потом все заново по кругу. Когда доходим до первой при пролистывании назад показывается последняя и потом опять все по новой.Пейджинг. С одной записью на страницу. Решения есть, поиск в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2014, 16:01:11 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=164&tid=1834293]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 318ms |

| 0 / 0 |
