Sql 因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE l
因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此Sql 因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE l,sql,orientdb,Sql,Orientdb,因此,如果表非常大,则效率不高。另外,您还需要在最后登录订购,OP需要一个分页功能,因此ais应该是第一位,而不是c SELECT * FROM ( SELECT login, permissions FROM User WHERE login < ? ORDER BY DESC login LIMIT ? ) ORDER BY login SELECT login, permissions FROM User WHERE login >
a
is应该是第一位,而不是c
SELECT * FROM (
SELECT login, permissions FROM User
WHERE login < ?
ORDER BY DESC login
LIMIT ?
) ORDER BY login
SELECT login, permissions FROM User
WHERE login >= ?
ORDER BY login
LIMIT ?
1. a
2. b
3. c
4. d
get(key = 'a', limit = 2) would return a, b
get(key = 'c', limit = 2) would return a, b
get(key = 'd', limit = 2) would return b, c
get(key = 'd', limit = 3) would return a, b, c
select *
from table
where login < ?
order by login DESC
limit n
UNION ALL
select *
from table
where login >= ?
order by login
limit n -- worst case scenerio all n logins are equal or beyound ?
SELECT *
FROM ( ... ) as union_query
ORDER BY login
limit n
key rn
a -1
b -2
c -3
d +4
e +5
key rn
c -3
b -2
a -1
d +4
e +5
select login, permissions
from
(
select
login,
permissions,
case when login < :value then
-row_number() over (order by login)
else
row_number() over (order by login)
end as rn
from user
)
order by rn
fetch first :n rows only;