【问题标题】:SQL to Criteria using propel使用推进的 SQL 到标准
【发布时间】:2012-09-20 13:06:28
【问题描述】:

我有这个sql:

SELECT link.ID, link.URL, link.ANCHOR, link.HOME, link.CREATED_AT 
FROM `link`, `linkcategory`
WHERE link.ID=linkcategory.LINK_ID
GROUP BY linkcategory.LINK_ID 
HAVING count(linkcategory.category_id) =(select count(*) from categoria)

我正在尝试生成标准,这是不起作用的标准:

$c = new Criteria();
$c->addJoin(self::ID, LinkcategoryPeer::LINK_ID);
$c->addAsColumn('catCount','(SELECT COUNT(*) FROM CATEGORIA)');
$c->addGroupByColumn(LinkcategoryPeer::LINK_ID);
$having = $c->getNewCriterion(count(LinkcategoryPeer::CATEGORY_ID),$c->getColumnForAs('catCount'));
$c->addHaving($having); 
return self::doSelect($c);

这个条件的返回sql就是这个:

SELECT (SELECT COUNT(*) FROM CATEGORIA) AS catCount 
FROM `link`, `linkcategory` 
WHERE link.ID=linkcategory.LINK_ID 
GROUP BY linkcategory.LINK_ID 
HAVING 1='(SELECT COUNT(*) FROM CATEGORIA)'

我真的不知道为什么条件转换 sql 不正确。有谁知道错在哪里?

【问题讨论】:

    标签: symfony1 criteria propel


    【解决方案1】:

    试试这个查询。我不记得如何使用 Propel 执行link.*。但我认为having 的问题在于您使用的是 PHP 计数函数而不是 MySQL。

    $c = new Criteria();
    $c->addSelectColumn(self::ID);
    $c->addSelectColumn(self::URL);
    $c->addSelectColumn(self::ANCHOR);
    $c->addSelectColumn(self::HOME);
    $c->addSelectColumn(self::CREATED_AT );
    
    $c->addJoin(self::ID, LinkcategoryPeer::LINK_ID);
    $c->addGroupByColumn(LinkcategoryPeer::LINK_ID);
    
    $having = $c->getNewCriterion(
      'COUNT('.LinkcategoryPeer::CATEGORY_ID.')'),
      $c->getColumnForAs('catCount')
    );
    $c->addHaving($having);
    
    return self::doSelect($c);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多