mysql - sequelize mysql中的嵌套查询以获取赞成票和反对票数
问题描述
我正在尝试对具有关联的答案表和与答案关联的单独投票表的帖子进行投票和否决
const posts = await Posts.findAll({
include: [{
model: Answers,
include: [{
attributes: {
include: [[Sequelize.fn("COUNT", Sequelize.col("id")), "votesCount"]]
},
model: Votes, attributes: []
}]
}]
});
这是我的投票模式
const Votes = sequelize.define('votes', {
id:{
type:Sequelize.INTEGER,
autoIncrement:true,
allowNull:false,
primaryKey:true
},
answerId: {
type: Sequelize.INTEGER,
allowNull:false,
references: {
model: 'answers',
key: 'id'
}
},
userId: {
type: Sequelize.INTEGER,
allowNull:false,
references: {
model: 'users',
key: 'id'
}
},
voteType: { type: Sequelize.BOOLEAN, allowNull:false },
createdAt: Sequelize.DATE,
updatedAt: Sequelize.DATE
})
voteType true 表示赞成,false 表示反对
有什么方法可以通过 Sequelize 获得结果?
期待这样的事情,
[{
"id": 1,
"userId": 15,
"title": "The standard Lorem Ipsum passage, used since the 1500s",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor i",
"answers": [
{
"id": 1,
"postId": 1,
"userId": 33,
"ans": "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia",
}
],
votes: {
upVote: 5,
downVote: 1
}
},]
解决方案
您可以尝试Sequelize.literal
使用子查询来获取这两个计数:
const posts = await Posts.findAll({
include: [{
model: Answers,
include: [{
attributes: {
include: [
[Sequelize.literal("(SELECT COUNT(*) FROM Votes WHERE answerId=answer.id AND Votes.voteType=true)"), "upVote"],
[Sequelize.literal("(SELECT COUNT(*) FROM Votes WHERE answerId=answer.id AND Votes.voteType=false)"), "downVote"]
]
}
}]
}]
});
推荐阅读
- java - 如何使用 Apache Beam 中的流式输入 PCollection 请求 Redis 服务器?
- google-apps-script - 如何将 google 脚本应用于备用行?
- python - leet code 66测试用例的'__getitem__`属性错误。加一难通过
- python - 熊猫在特定条件下繁殖
- javascript - 如何将文本悬停在自定义形状上?
- kubernetes - Kubernetes Kustomize:替换补丁文件中的变量
- email - 通知发件人新的电子邮件地址,当它是 Gmail 别名时
- excel - 有没有办法删除在 VBA 中选择的当前范围?
- javascript - Javascript函数返回未定义不是真的
- python - 熊猫试图找到一种解决方案,以更好地提取不同模式的字符串