2011-10-31 96 views
1

我正在使用Elixir進行ORM,但嘗試通過關係進行排序時出現問題。OneToMany Elixir關係的計數順序

我想要做的是得到一個用戶列表,按用戶發佈的帖子數排序。我曾嘗試過如下方法:

User.query.join(User.posts).order_by(func.count(User.posts)).all() 

沒有任何成功。

這裏是我的靈藥實體:

class User(Entity): 
    username = Field(Unicode(100)) 
    posts = OneToMany('Post', inverse='user') 


class Post(Entity): 
    content = Field(Unicode(20000)) 
    user = ManyToOne('User') 

回答

5

這是一個常見的問題和示例查詢是在ORM教程在:http://www.sqlalchemy.org/docs/orm/tutorial.html#using-subqueries。只要改變它說:ORDER_BY(User.id)說ORDER_BY(stmt.c.address_count):

>>> from sqlalchemy.sql import func 
>>> stmt = session.query(Address.user_id, func.count('*').\ 
...   label('address_count')).\ 
...   group_by(Address.user_id).subquery() 

>>> for u, count in session.query(User, stmt.c.address_count).\ 
...  outerjoin(stmt, User.id==stmt.c.user_id).order_by(stmt.c.address_count): 
...  print u, count 
+0

謝謝!子查詢確實是我正在尋找的。 –