【发布时间】:2014-03-25 18:27:18
【问题描述】:
我正在尝试使用 sequelize 获取特定列的不同计数。我最初的尝试是使用我的模型的“计数”方法,但看起来这不可能。
需要 DISTINCT 功能,因为我正在加入其他表并根据相关表过滤父级的行。
这是我想要的查询:
SELECT COUNT(DISTINCT Product.id) as `count`
FROM `Product`
LEFT OUTER JOIN `Vendor` AS `vendor` ON `vendor`.`id` = `Product`.`vendorId`
WHERE (`vendor`.`isEnabled`=true );
对我的产品模型使用以下查询:
Product.count({
include: [{model: models.Vendor, as: 'vendor'}],
where: [{ 'vendor.isEnabled' : true }]
})
生成以下查询:
SELECT COUNT(*) as `count`
FROM `Product`
LEFT OUTER JOIN `Vendor` AS `vendor` ON `vendor`.`id` = `Product`.`vendorId`
WHERE (`vendor`.`isEnabled`=true );
【问题讨论】:
-
为什么不直接使用存储过程并调用它呢?根据这个 changelog (sequelizejs.com/changelog/v1-6-0) sequelize 支持存储过程。然后,您可以以最适合您需求的方式编写查询,并针对您正在使用的数据库对其进行优化。
-
这可能是一个有效的解决方案,您是说没有其他方法可以在计数操作中包含 DISTINCT 吗?
-
我不知道任何其他方式,但其他人可能对如何实现它有想法。通常,出于诸如此类的原因,我尝试对所有与数据库相关的代码使用存储过程。无论我碰巧使用什么前端技术,我都会使用这种方法。真正令人高兴的是,您可以在针对您的数据库使用不同的前端技术时重复使用该存储过程。
-
@Adam 你怎么这么喜欢 DISTINCT 和 Sequelize?
-
@JoshC 因为我喜欢在人群中脱颖而出。我是一个偶像破坏者。
标签: sequelize.js