我想使用sequelize獲得特定列的不同數量。我最初的嘗試是使用我的模型的'count'方法,但它看起來不像這是可能的。如何獲得一個明確的計數與續集?
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(http://sequelizejs.com/changelog/v1-6-0)sequelize支持存儲過程。然後,您可以以最適合您的需求的方式編寫查詢,併爲您正在使用的數據庫進行優化。 – dcp
這可能是一個有效的解決方案,你是否說沒有其他方式在計數操作中包含DISTINCT? – Adam
我不知道任何其他方式,但其他人可能有想法的方法來做到這一點。一般來說,我嘗試使用存儲過程來處理所有與數據庫相關的代碼,這是因爲這樣的原因。無論我碰巧使用哪種前端技術,我都會使用這種方法。真正好的是,您可以重複使用該存儲過程,因爲針對您的數據庫使用了不同的前端技術。 – dcp