さまざまな結合タイプを試しましたが、どのタイプを使用すればよいかわかりませんでした。各記事のコメント数を数えたい。
$select = $this->_db->select()
->from($this->_name)
->joinLeft('categories', 'categories.cat_id = ' . $this->_name . '.category', array('category_name' => 'name'))
->joinLeft('comments', 'comments.post_id = ' . $this->_name. '.post_id', array('num_comments' => 'COUNT(*)'))
->group($this->_name.'.post_id')
->limit(3)
->order("pubDate DESC");
if($category_id > 0) $select->where("category = ?", $category_id);
if($last_pub_date > 0) $select->where("$this->_name.pubDate < ?", $last_pub_date);
私はこの方法をツイッターでもページネーションのように使用しているので、その$last_pub_date
ためです。良さそうですが、もちろん、記事のクエリフェッチにjoinLeft()
コメントがない場合は、0ではなく1としてカウントされます。他の結合タイプで試しましたが、コメントがない場合は、行全体がフェッチされないか、$this->_db->order("pubDate DESC")
正しく機能しません。サブクエリも試してみましたが、正しく書いたかどうかわかりません。