所以,我将 sequelize 与 mysql 实例一起使用,并且我有这样的层次结构:一个任务有 n 个图像和 n 个元数据键值对。
我想根据任务的 userId 列获取所有图像,然后将它们按“createdAt”列分组,同时考虑到这一天,因为正常的 groupby 将毫无意义(没有对象共享相同的日期时间)。我做了很多测试来尝试分组,最后我使用了这个查询,结果很糟糕(我有 11 个任务的图像,它检索了 4 个)。老实说,我不知道我做错了什么。你们有什么想法吗?
这是代码片段:
var userId = security.utils.getKeycloakSubject(req);
var where = {
userId: userId
};
db.image.findAll({
include: [{
model: db.task,
include: [{
model: db.metadata,
as: 'metadata'
}],
where: where
}],
group: [db.Sequelize.fn('DAY', db.Sequelize.col('image.createdAt'))]
}).then(function (images) {
return res.json(images);
}, function (error) {
return res.status(500).json(error);
})
最佳答案
我看到了你的问题,还发现了这个:Sequelize grouping by date, disregarding hours/minutes/seconds
这是一个关于组 DAY(createdAt) 的问题,看起来和你的很相似。
我的 GROUP BY DAY() 解决方案如下所示:
item.findAll({
attributes:
[[sequelize.fn('DATE_FORMAT', sequelize.col('TimeStamp'), '%H'), 'dates']],
group: [sequelize.fn('DAY', sequelize.col('TimeStamp'))]
}).
then(function(result){console.log(result)
}).
catch(function(error){}).catch(function(error) {
console.log(error);
});
所以原始 SQL 喜欢:
SELECT DATE_FORMAT('TimeStamp', '%H') as 'dates' FROM tableName GROUP BY DAY('TimeStamp');
希望对你有帮助,或者你可以给我们看看你想使用的SQL,也许对你也更容易帮助。
祝你好运。
关于mysql - 对父属性找到的按天对象排序查询组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40286525/