我有User
和Post
表。
用户有许多帖子
关系。我想查询用户并按用户发布的帖子数对查询进行排序。我该如何编写这个 sequelize 查询?
Post.belongsTo(User, {foreignKey: 'userId'});
User.hasMany(Post, {foreignKey: 'userId'});
User.findAll( {
order: 'COUNT(Post) DESC', //???
include: [Post]
});
如何让此用户查询按帖子排序?
最佳答案
可能有更好的方法,但您可以使用 .literal()
创建子查询并分配别名。然后,您可以在订购时引用别名,示例:
User.findAll({
attributes: [
'User.username',
[sequelize.literal('(SELECT COUNT(*) FROM Posts WHERE Posts.userId = User.id)'), 'PostCount']
],
order: [[sequelize.literal('PostCount'), 'DESC']]
});
这将产生以下 SQL:
SELECT
`User`.`username`,
(SELECT COUNT(*) FROM Posts WHERE Posts.userId = User.id) AS `PostCount`
FROM
`Users` AS `User`
ORDER BY
PostCount DESC
关于mysql - 按计数关联排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33900750/