【问题标题】:[Yii][SQL] Do not getting records when join tables to get count of offers[Yii][SQL] 联表获取offer数时不获取记录
【发布时间】: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


    【解决方案1】:

    已解决:

    标准:

    $criteria->select = "*, (COUNT(DISTINCT abid.id) + COUNT(DISTINCT abuy.quantity)) AS `offers`";
    $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';
    

    排序:

    $sort = new CSort('Auction');
    $sort->attributes = array('offers');
    $sort->applyOrder($criteria);
    

    分页:

    $item_count = Auction::model()->count($clean_criteria);
    $pages = new CPagination($item_count);
    $pages->applyLimit($criteria);  
    

    搜索:

    $auctions = Auction::model()->findAll($criteria);
    

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多