我正在使用此SequelizeJS查询来获取产品和价格数据。
models.products.findAll({
where: Sequelize.where(Sequelize.fn('CONCAT_WS', ' ', Sequelize.col('brand'), Sequelize.col('name')),{ $like: `%${searchQuery}%`}),
limit: limit,
offset: offset,
include: [{
model: models.prices,
group: ['sourceId']
}],
order: [
['name', 'desc'],
[models.prices, 'createdAt', 'desc']
],
});
主要问题在于此查询的include
部分。
我的prices
模型列如下所示,这是对其中一个包含内容的示例查询。
id price createdAt updatedAt sourceId productId
4685 329.99 2018-03-06 17:47:13 2018-03-06 17:47:13 1 7
4466 399.00 2018-02-23 16:46:59 2018-02-23 16:46:59 1 7
3881 329.00 2017-11-16 13:13:15 2017-12-10 19:15:40 1 7
3749 339.99 2017-10-18 09:50:53 2017-10-18 09:50:53 3 7
2661 349.00 2017-08-08 13:57:07 2017-08-08 13:57:07 3 7
7 349.00 2017-08-03 17:01:24 2017-09-17 10:24:55 1 7
我的目标是按sourceId
进行分组和限制,但按该列分组并不是我的解决方案。
而不是上述结果,这是我所期望的:
id price createdAt updatedAt sourceId productId
4685 329.99 2018-03-06 17:47:13 2018-03-06 17:47:13 1 7
3749 339.99 2017-10-18 09:50:53 2017-10-18 09:50:53 3 7
这里的区别在于它是每个sourceId的限制/组,并且只显示每个sourceId最近创建的行。
最初我收到一条错误,指出我是SQL的这种模式:sql_mode=only_full_group_by
,其他用户建议删除此模式。这感觉就像一个混乱的方法,但它确实删除了我的错误并获取结果 - 但不像我期望的那样。