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