按每门课程的评论数量显示课程列表

时间:2013-07-27 21:33:21

标签: sqlalchemy flask-sqlalchemy

我有两个课程:课程和评论。 我想按照每门课程的评论数量显示一系列课程。例如,评论数量最多的课程应该是列表中的第一个....有人请帮我找到一个有效的查询来做到这一点。感谢。

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'))

1 个答案:

答案 0 :(得分: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()