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

1 回答 1

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()
于 2013-07-28T03:44:10.143 回答