通常のSQLクエリで試しました
SELECT activity_shares.id FROM `activity_shares`
INNER JOIN (SELECT `activity_id` FROM `activity_shares`
GROUP BY `activity_id`
HAVING COUNT(`activity_id`) > 1 ) dup ON activity_shares.activity_id = dup.activity_id
これにより、レコードIDは10と11になります
しかし、私がやろうとしたのと同じクエリDoctrine query builder
、
$qb3=$this->getEntityManager()->createQueryBuilder('c')
->add('select','c.id')
->add('from','MyBundleDataBundle:ActivityShare c')
->innerJoin('c.activity', 'ca')
// ->andWhere('ca.id = c.activity')
->groupBy('ca.id')
->having('count(ca.id)>1');
編集:
$query3=$qb3->getQuery();
$query3->getResult();
生成されるSQLは次のとおりです。
SELECT a0_.id AS id0 FROM activity_shares a0_
INNER JOIN activities a1_ ON a0_.activity_id = a1_.id
GROUP BY a1_.id HAVING count(a1_.id) > 1
10のレコードを1つだけ与えます。両方を取得したい。どこが間違っていたのかわからない。何か考えはありますか?
私のテーブル構造は次のとおりです。
ActivityShare
+-----+---------+-----+---
| Id |activity |Share| etc...
+-----+---------+-----+----
| 1 | 1 |1 |
+-----+---------+-----+---
| 2 | 1 | 2 |
+-----+---------+-----+---
Activity
Activity
テーブルへの外部キーです。IDの1と2を取得したい