これは私のタグテーブルです:
post_id tag topic
1 picture entertainment
1 camera entertainment
1 mobile technology
2 cable technology
これは今の私のSQLです(Zend Frameworkを使用):
$select = $db->select();
$select->from(array('t' => 'tags'), array('count(*)', 't.topic'))
->joinInner(array('p' => 'posts'),'p.post_id = t.post_id')
->where('p.status = ?', self::STATUS_LIVE)
->where('t.topic= ?', $options);
return $db->fetchOne($select);
IDごとに1つだけ選択して、トピックを数えたい。この場合、次のようになります。
entertainment: 1
technology: 2
今の私の結果は次のとおりです。
entertainment: 2
technology: 2
これが解決策です:
$select = $db->select();
$select->from(array('t' => new Zend_Db_Expr('(SELECT post_id,topic FROM tags group by post_id,topic)')), array('count(*)', 't.topic'))
->joinInner(array('p' => 'posts'), 'p.post_id = t.post_id', array())
->where('p.status = ?', self::STATUS_LIVE)
->where('t.topic= ?', $options)
->group("t.topic");
return $db->fetchOne($select);