私はCakePHP 1.2を使用するシステム用のプラグインモジュールを作成しています。私はこのフレームワークを初めて使用しています。どのようにケーキの方法で次のクエリを実行しますか?CakePHPの方法でGROUPを使ったINNER JOIN
SELECT a.id, a.name, COUNT(a.id) AS comments
FROM articles a LEFT JOIN comments c ON a.id = c.item_id
GROUP BY a.id
ORDER BY comments DESC;
私は記事やコメントのモデルを編集することはできませんが、私は私のプラグインのモデルでこれをしようとしていると、それは同じ結果与えるものではありません。また
$this->loadModel('Article');
$options['fields'] = array('Article.id', 'Article.name',
'COUNT(Article.id) AS comments');
$options['joins'] = array(
array('table' => 'comments',
'alias' => 'c',
'type' => 'INNER',
'conditions' => array(
'Article.id = c.item_id')
));
$options['group'] = array('Article.id');
$options['order'] = 'comments DESC';
$options['limit'] = 5;
$rows = $this->Article->find('all', $options);
を、I 「よく分からないが、私は記事のクラスが既に持っているかもしれないと思う:
public $actsAs = array('Containable');
public $hasMany = array('Comment');
普通のSQLでは、あなたは 'LEFT JOIN'を持っていますが、Cakeでは' type => INNER'を定義します。それは意図的ですか? – biziclop
INNERはより正確で、OUTER結合でのみLEFTとRIGHTを使用しますが、MySQLではJOIN、LEFT JOIN、INNER JOINがすべて同じものとして扱われます –
いいえ、 'INNER'と' LEFT'( 'LEFT OUTER')結合異なって扱われる。しかし、結合されたテーブルの条件をWHERE句に追加すると、mysqlは 'LEFT JOIN'を' INNER JOIN'として処理します。 – bfavaretto