Symfony1 使用spreep将SQL转换为标准
我有一个sql:Symfony1 使用spreep将SQL转换为标准,symfony1,criteria,propel,Symfony1,Criteria,Propel,我有一个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) 我正在尝试生
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。有人知道错误在哪里吗?试试这个查询。我不记得如何使用推进执行
链接。*
。但是我认为拥有的问题在于,您使用的是PHP count函数而不是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);