我有两个表 user 和 like 。关系是一对多的,用户可以有很多喜欢。我想计算一个用户有多少个喜欢的对象,并返回一个带有用户名的对象,并以一个喜欢的数量返回一个列数,但是,我发现很难进行续集。
以下是有效的原始查询,结果是一个表。
SELECT us.username, COUNT(lk.other_user_id)
FROM user as us
INNER JOIN like as lk
ON us.id = lk.other_user_id
WHERE us.id = 40
GROUP BY us.username
这是我尝试过的续集代码。
like.findAll({
attributes: {
include: [[sequelize.fn('COUNT', sequelize.col('other_user_id')), 'like_count']],
},
where: { other_user_id: 40 },
include: [{
model: user,
attributes: [],
where: { id: 40 },
}],
group: ['user.username'],
});
结果应为具有用户名称的对象和具有“喜欢”次数的属性 count 。而是返回所有行并为每个对象计为1。
答案 0 :(得分:0)
我找到了解决方案。我包括了 user ,但是在上述有问题的SQL原始查询中,在 join 条件下,我测试了 user.id = like.other_user_id ,但外部 like 表上的键是 user_id ,并指向 user 表上的 id 列,因此无法进行续集找不到具有 user.id = like.other_user_id 的任何行,而是匹配为 user.id = like.user_id 的行。
下面是我的解决方案,其中我加入了自定义列上的表格。
const { ok, result, error } = await handlePromise(like.findAll({
attributes: [[sequelize.fn('COUNT', sequelize.col('like.other_user_id')), 'like_count']],
include: [
{
model: user,
where: { id: userId },
attributes: ['username'],
on: {
col1: sequelize.where(sequelize.col('user.id'), '=', sequelize.col('like.other_user_id')),
},
},
],
group: ['user.username'],
raw: true,
}));