mysql - 按计数关联排序?

标签 mysql sequelize.js

我有UserPost 表。 用户有许多帖子 关系。我想查询用户并按用户发布的帖子数对查询进行排序。我该如何编写这个 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/

相关文章:

node.js - Sequelize : join query adding extra column which is not in model

mysql - 使用 Node + Express + Sequelize +(Mysql 或 Postgres)构建 SaaS 产品

sql - 如何使用 Postgres 的 sequelize 删除重复行?

php - 如何分配 mySQL 值 -> HTML -> PDF (MPDF)

c# - MySQLX.GetSession异常: : 'Expected message id: 2. Received message id: 10'

mysql - 将 MySQL 更新查询转换为 sequelize 查询

mysql - Sequelize - 匹配 mySQL 数据库中给定实体的所有记录

mysql - 是否有必要为只包含 7 或 8 个可能字符串的列创建索引?

PHP login.php 用户无法在 mysql 上工作

php - PDO 在 PHP5.4 中将整数列作为字符串返回