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