Как определить, на какой странице находится определенная запись?Определить на какой странице запись
Скажем, я отображать 5 записей на странице, используя запрос, как это:
SELECT * FROM posts ORDER BY date DESC LIMIT 0,5
SELECT * FROM posts ORDER BY date DESC LIMIT 5,5
SELECT * FROM posts ORDER BY date DESC LIMIT 10,5
Образец данных:
id | name | date
-----------------------------------------------------
1 | a | 2013-11-07 08:19 page 1
2 | b | 2013-12-02 12:32
3 | c | 2013-12-14 14:11
4 | d | 2013-12-21 09:26
5 | e | 2013-12-22 18:52 _________
6 | f | 2014-01-04 11:20 page 2
7 | g | 2014-01-07 21:09
8 | h | 2014-01-08 13:39
9 | i | 2014-01-08 16:41
10 | j | 2014-01-09 07:45 _________
11 | k | 2014-01-14 22:05 page 3
12 | l | 2014-01-21 17:21
Кто-то может редактировать запись, скажем, с id = 7
, или вставить новый запись (id = 13
). Как определить, на какой странице находится эта запись? Причина в том, что я хочу отобразить страницу, содержащую только что отредактированную или добавленную запись.
ok Я думаю, я мог бы просто отобразить одну и ту же страницу, если запись будет отредактирована. Но проблема в том, когда запись добавляется. Список можно заказать по имени и новая запись может быть размещена в любом месте :(
Есть ли какой-то способ, которым я мог бы сделать запрос как SELECT offset WHERE id = 13 ORDER BY date LIMIT 5
, который возвращает 10?
Что делает запись «date»? Это ** ужасное название для столбца - это только описательный тип, а не то, что важно - содержащаяся информация. Например, если это действительно «updatedAt», я бы предположил, что страница будет «страница 1» .... (если частота обновлений слишком быстрая, в этом случае у вас проблемы с разбивкой по страницам). В противном случае вы должны заказать все страницы (на основе чего-либо), присвоить ранг (место на странице), а затем найти, какой ранг (и, следовательно, страница) указанная запись включена. Если ваш набор записей большой, это может быть дорогостоящим ... OLAP-функции/CTEs помогают, но ... –
это 'createdAt', а не' updatedAt'. Я не понимаю, как помочь рангам, если мне все равно нужно получить весь набор: s – Alex
Я говорю о функциях OLAP, таких как 'ROW_NUMBER()', что называется «функцией оконной обработки» (SQLite doesn ' t, похоже, имеет эту функцию). Функция присваивает добавочное число на основе указанного порядка, который затем может использоваться для возврата смещений и т. Д. Хотя, думая об этом, здесь есть другое решение ... написать ответ ... –