2011-07-11 56 views
0

頭痛試圖找出半天后雙INNER JOIN,我終於得到了它的權利:的Propel:需要標準以下SQL查詢

SELECT product.id as product_id, count(purchase_vaucher.object_id) as purchased 
FROM purchase_vaucher 
INNER JOIN purchase on purchase.id = purchase_vaucher.object_id 
INNER JOIN product on purchase.product_id = product.id 
WHERE purchase.is_paid=1 
GROUP BY product.id 
ORDER BY purchased_amount desc; 

這是什麼有關:基本上,三個表: product,purchase,purchase_vaucher(是的,我知道這是「優惠券」,但我沒有發明架構)。基本上,purchase包含購買和一個product的反向鏈接。 purchase_vaucher包含有關優惠券的信息和purchase的背面鏈接。我從這個查詢中得到的結果是:對於is_paid=1的所有purchase s,計算所有具有相同產品ID的購買的所有憑證,並將它們按產品ID進行分組。

我需要的是:上述查詢翻譯爲Propel Criteria API調用。

我開始馬上工作,但如果我可以節省一些時間,我會很高興。

謝謝。

回答

1

奇怪的是,它竟然非常簡單:

$purchased_amount_column = 'purchased_amount'; 

$c = new Criteria(); 
self::addSelectColumns($c); 
$c->addAsColumn($purchased_amount_column, 'COUNT(' . PurchaseVaucherPeer::OBJECT_ID . ')'); 
$c->addGroupByColumn(ProductPeer::ID); 
$c->addDescendingOrderByColumn($purchased_amount_column); 
$c->add(PurchasePeer::IS_PAID, 1, Criteria::EQUAL); 
$c->addJoin(PurchasePeer::ID, PurchaseVaucherPeer::OBJECT_ID, Criteria::INNER_JOIN); 
$c->addJoin(PurchasePeer::PRODUCT_ID, ProductPeer::ID, Criteria::INNER_JOIN); 

曾與尋呼機麻煩,但我花了5分鐘,要認識到的方式,使指望這種非的記錄微不足道的標準就是這樣:

$pager->setPeerCountMethod('customCount'); 
... 
// customCount: 
return YourPeer::doCount($yourCriteria); 

這就是它。