1
如何找到用户在查询中的位置? 我有(我使用MySQL)如何找到用户在查询中的位置?
session.query(UserModel).order_by(desc(UserModel.age)).all()
,我有用户ID,如何找到特定ID的位置有序阵列? (我可以返回所有和迭代,但有没有更好的方式来解决这个在数据库级别上,需要跑得快)
如何找到用户在查询中的位置? 我有(我使用MySQL)如何找到用户在查询中的位置?
session.query(UserModel).order_by(desc(UserModel.age)).all()
,我有用户ID,如何找到特定ID的位置有序阵列? (我可以返回所有和迭代,但有没有更好的方式来解决这个在数据库级别上,需要跑得快)
数据库应该支持window functions来做到这一点。原始的SQL查询将是这样的:
SELECT pos FROM
(SELECT id, row_number() OVER (ORDER BY age DESC) AS pos FROM user) AS sub
WHERE sub.id = :id;
在SQLAlchemy中:
from sqlalchemy import func, desc
user_id = 42
sub = (session
.query(
UserModel.id,
func.row_number().over(order_by=desc(UserModel.age)).label('pos'))
.subquery())
pos = session.query(sub.c.pos).filter(sub.c.id==user_id).scalar()
注意,返回的索引是基于1的。
在流行的RDBMS中,它可以在PostgreSQL,Oracle,MSSQL中使用,但不能在MySQL或SQLite中使用。
如何MySQL或SQLite数据库?他们有没有解决方案? –