Python 我的行显示在哪一页?
我有一张帖子表。我显示按时间降序排列的贴子列表,每页限制为20行。如何通过id确定特定行所在的页面,以便链接到该特定页面 桌柱 当前Python 我的行显示在哪一页?,python,sql,postgresql,pagination,sqlalchemy,Python,Sql,Postgresql,Pagination,Sqlalchemy,我有一张帖子表。我显示按时间降序排列的贴子列表,每页限制为20行。如何通过id确定特定行所在的页面,以便链接到该特定页面 桌柱 当前 select * from post order by created_date desc limit 20 offset 0 id X在哪一页?我的理论是,当您通过特定的“order by”进行选择时,我可以返回id所在的行号,但我不确定这是否正确,也不确定如何执行此操作。我建议在子查询中: SELECT rn / 20 + 1 AS page -- 20
select * from post order by created_date desc limit 20 offset 0
id X在哪一页?我的理论是,当您通过特定的“order by”进行选择时,我可以返回id所在的行号,但我不确定这是否正确,也不确定如何执行此操作。我建议在子查询中:
SELECT rn / 20 + 1 AS page -- 20 rows per page
FROM (
SELECT id, row_number() OVER (ORDER BY created_date DESC) AS rn
FROM post
) sub
WHERE id = 123;
通常的免责声明:如果基础数据同时更改,页码可能会更改。如果您想要一个链接,并且如果创建日期始终是插入当前时间戳,则可以计算序列id 为了更方便地始终将当前的时间戳作为创建的时间戳,请将其设置为默认值
created_date timestamp default current_timestamp
可以将其设置为约束
created_date timestamp default current_timestamp check(created_date = current_timestamp)
如果需要链接列表,请将ID作为Python列表传递给查询
select *
from (
select id, count(*) over(order by id desc) / 20 + 1 as page
from post
where
id >= (
select id
from unnest(%(ids_list)s) s
order by id
limit 1
)
) s
where id = any (%(ids_list))s
在最后一个查询中,count是一个运行总数
created_date timestamp default current_timestamp check(created_date = current_timestamp)
select *
from (
select id, count(*) over(order by id desc) / 20 + 1 as page
from post
where
id >= (
select id
from unnest(%(ids_list)s) s
order by id
limit 1
)
) s
where id = any (%(ids_list))s