javascript - 使用 Sequelize 按连接表计数列排序

标签 javascript sequelize.js

一段时间以来,我一直试图让它发挥作用,并希望获得一些见解。
目标:我正在尝试按照帖子目前拥有的点赞数量对帖子进行排序。
当前的:

const posts = await db.post.findAll({
    include: [ db.user, { model: db.like_post, where: { user_id: user }, required: false } ],
    where: { category },
    group: [ [ sequelize.col('like_posts.post_id') ] ],
    order: [ [ sequelize.fn('count', sequelize.col('like_posts.post_id')), 'DESC' ] ]
});
我目前得到的错误说:
"message": "column \"post.id\" must appear in the GROUP BY clause or be used in an aggregate function",
任何人都有任何建议我可能会做错什么才能使我的帖子顺序正确?
再次感谢所有的帮助和提示。

最佳答案

因为您使用聚合函数 count,所以在 SELECT 和 FROM 之间列出的所有其他字段都应该在 GROUP BY 中列出。
如果您只想通过 post 中相关记录的计数对 like_post 进行排序,并保留 post 中的所有字段以及 user 中包含的字段,则应在 order 选项中使用原始子查询。
像这样的东西:

order: [[sequelize.literal('(select count(*) from like_post where like_post.post_id=post.id)', 'DESC']

关于javascript - 使用 Sequelize 按连接表计数列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64431201/

相关文章:

javascript - 如何删除除特定属性之外至少具有一个属性的标签?

javascript - 用 div 背景元素替换所有图像

node.js - 显示其他人的用户资料

node.js - 在迁移中执行原始查询 - Sequelize 3.30

Sequelize.js:ER_ROW_IS_REFERENCED:无法删除或更新父行:外键约束失败

node.js - 复杂的过滤器 Sequelize js

node.js - Sequelize Order 不返回排序结果

javascript - Tablesorter 特定排序与法国数字

javascript - Vuejs 变异对象作为 prop 传递

javascript - 如何将 TinyMCE 的文本区域中的内容直接传递到 PHP 文件而不是通过 AJAX 发送?