2013-08-16 15 views
1

如何找到用户在查询中的位置? 我有(我使用MySQL)如何找到用户在查询中的位置?

session.query(UserModel).order_by(desc(UserModel.age)).all() 

,我有用户ID,如何找到特定ID的位置有序阵列? (我可以返回所有和迭代,但有没有更好的方式来解决这个在数据库级别上,需要跑得快)

回答

2

数据库应该支持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中使用。

+0

如何MySQL或SQLite数据库?他们有没有解决方案? –

相关问题