1

さまざまな結合タイプを試しましたが、どのタイプを使用すればよいかわかりませんでした。各記事のコメント数を数えたい。

$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")正しく機能しません。サブクエリも試してみましたが、正しく書いたかどうかわかりません。

4

1 に答える 1

2

COUNT(comment_id)左の結合は右ですが、の代わりにを使用する必要がありますCOUNT(*)COUNT(*)コメントがない場合でも1行になる行数を返します。COUNT(comment_id)値以外の数を返しNULL comment_idます。これは、探しているものである必要があります。

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

于 2012-06-24T13:52:07.353 に答える