【发布时间】:2014-06-14 08:06:05
【问题描述】:
我有以下代码可以按报价(出价和购买)排序:
$clean_criteria = new CDbCriteria;
$clean_criteria->order = 'promoted DESC';
$criteria = new CDbCriteria;
$criteria->order = 'promoted DESC';
$criteria->select = "*, (COUNT(aa.id) + COUNT(ab.id)) as offers";
$criteria->join = ' LEFT JOIN auction_bid aa ON (t.id = aa.auction)';
$criteria->join .= ' LEFT JOIN auction_buy ab ON (t.id = ab.auction)';
我正在使用分页和排序:
$item_count = Auction::model()->count($clean_criteria);
$pages = new CPagination($item_count);
$pages->setPageSize(5);
$pages->applyLimit($clean_criteria);
$sort = new CSort('Auction');
$sort->attributes = array('offers'=>array('asc'=>'offers', 'desc'=>'offers DESC'));
$sort->applyOrder($clean_criteria);
但要获得报价,我必须在寻找拍卖时使用$crtieria:
$auctions = Auction::model()->findAll($criteria);
现场有正确的页面计数,但每一个都有相同的拍卖。问题是查询只返回一条记录,但是如何解决呢?
P.s 也许我使用了错误的加入类型,没有报价的拍卖不会返回?
编辑:
这段代码正常工作:
$criteria->select = "*, COUNT(abid.id) AS offers1";
$criteria->join = ' LEFT JOIN auction_bid abid ON (t.id = abid.auction)';
$criteria->group = 't.id';
第一次拍卖返回offers1 = 1。
以下也是:
$criteria->select = "*, COUNT(abuy.id) AS offers2";
$criteria->join = ' LEFT JOIN auction_buy abuy ON (t.id = abuy.auction)';
$criteria->group = 't.id';
第一次拍卖返回offers2 = 4
但是当我将它组合成一个查询时:
$criteria->select = "*, COUNT(abid.id) AS offers1, COUNT(abuy.id) AS offers2";
$criteria->join = ' LEFT JOIN auction_bid abid ON (t.id = abid.auction)';
$criteria->join .= ' LEFT JOIN auction_buy abuy ON (t.id = abuy.auction)';
$criteria->group = 't.id';
第一次拍卖返回offers1 = 4 and offers2 = 4。
如何解决?
【问题讨论】:
标签: activerecord yii