2012-06-24 2 views
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")이 올바르게 작동하지 않습니다. 하위 쿼리를 사용해 보았지만 그래야만 제대로 작성했는지 확실하지 않습니다.

답변

2

왼쪽 가입은 올바르지 만 COUNT(*) 대신 COUNT(comment_id)을 사용해야합니다. COUNT(*)은 행 수가없는 경우에도 1이됩니다. COUNT(comment_id)은 비 NULLcomment_id 값의 수를 반환합니다.이 값은 찾고자하는 값이어야합니다.

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

+0

당신은 절대적으로 옳습니다! 고마워요, 이제 작동합니다. – enenen