2013-07-27 36 views
0

我有兩門課程:課程和評論。 我想顯示按每門課程的評論數量排列的課程列表。例如,評論數量最多的課程應該是列表中的第一個。有人請幫我找一個有效的查詢來做到這一點。謝謝。按每門課程的評論數顯示課程列表

class Course(db.Model): 
id = db.Column(db.Integer, primary_key = True) 
course_name =db.Column(db.String(120)) 
course_description = db.Column(db.Text) 
course_comments = db.relationship('Comment', backref ='course', lazy ='dynamic') 





class Comment(db.Model): 
id = db.Column(db.Integer, primary_key = True) 
comment_date = db.Column(db.DateTime, default=db.func.now()) 
comment = db.Column(db.Text) 
course_id = db.Column(db.Integer, db.ForeignKey('course.id')) 
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 

回答

0

那麼,你想要做的,就SQL而言,計數組中的實例數,然後按該計數排序。這個問題給出了一些背景:Counting the number of child records in a one-to-many relationship with SQL only

所以在SQL我想你想要做的是一樣的東西:

SELECT course_id, count(*) 
FROM comment 
GROUP BY course_id 
ORDER BY count(*); 

這給你的課程ID的從評論的數量排序的意見表。這個答案告訴我們如何在sqlalchemy中做到這一點:https://stackoverflow.com/a/4086229/1216837

import desc 
import func.count 
import order_by 

session.query(Comment.course_id,func.count(Comment.course_id)).\ 
    group_by(Comment.course_id).\ 
    order_by(desc(func.count(Comment.course_id))).\ 
    all() 
+0

完美,非常感謝。 –