Я пишу модуль плагина для системы, использующей CakePHP 1.2, и я новичок в структуре. Как сделать следующий запрос: Cake?INNER JOIN with GROUP By the CakePHP way
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);
Кроме того, я не уверен, но я думаю, что класс статьи, возможно, уже есть:
public $actsAs = array('Containable');
public $hasMany = array('Comment');
В вашем обычном sql у вас есть «LEFT JOIN», в Торт вы определяете 'type => INNER'. Это намеренно? – biziclop
Я верю, что INNER вернее, и вы используете LEFT и RIGHT только с соединениями OUTER, но по моему опыту MySQL рассматривает JOIN, LEFT JOIN и INNER JOIN все одинаковые –
Нет, 'INNER' и' LEFT' ('LEFT OUTER') объединяются обрабатываются по-разному. Однако mysql будет использовать 'LEFT JOIN' как' INNER JOIN', если вы добавите дополнительные условия в объединенную таблицу к предложению 'WHERE'. – bfavaretto