2013-08-16 14 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數據庫?他們有沒有解決方案? –

相關問題