经过半天的头痛试图找出双重内心加入,我终于做对了:
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
的反向链接的信息。我在此查询中需要的内容:对于拥有purchase
的所有is_paid=1
,请计算具有相同产品ID的所有购买的所有凭证,并按产品ID对其进行分组。
我需要的是:上述查询被翻译为Propel Criteria
API调用。
我现在就开始研究这个问题了,但如果能节省一些时间,我会很高兴。
感谢。
答案 0 :(得分: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);
就是这样。