0

私はこの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を間違って変換する理由が本当にわかりません。どこが間違っているか分かる人いますか?

4

1 に答える 1

0

このクエリで試してください。link.*Propel を使用して実行する方法を覚えていません。havingしかし、問題は、MySQL の代わりに PHP の count 関数を使用していることだと思います。

$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);
于 2012-09-20T13:45:24.347 に答える