2017-08-07 5 views
0

このsqlクエリをdoctrineクエリまたはdqlフォームに変更する必要があります。これは可能ですか?SQLをDQLに変換

SELECT count(*) AS listenCount, l.post_id AS postId 
FROM (SELECT DISTINCT ll.user_id, ll.post_id FROM listen ll) l 
WHERE l.post_id IN (' . $id . ') 
GROUP BY l.post_id 

私の問題はdqlで、クラス名である必要があり、「FROM」の前にある括弧内のテキスト、です。しかし、DISTINCTコマンドのために、クラス名を与えることはできません。クエリの

答えて

0

同等のSQLは教義では

SELECT COUNT(DISTINCT user_id) AS listenCount, 
l.post_id AS postId 
FROM listen l 
WHERE l.post_id IN (' . $id . ') 
GROUP BY l.post_id 

ように書き換えることができる私はあなたが以下のように上記のクエリのための同等のDQLを書くことができますので、あなたは、ユーザエンティティとポストエンティティのマッピングを含むエンティティを聞くセットアップを持っていると仮定します

SELECT COUNT(DISTINCT u.id) AS listenCount, 
p.id AS postId 
FROM YourBundle:listen l 
JOIN l.user u 
JOIN l.post p 
WHERE p.id IN (' . $id . ') 
GROUP BY p.id 

注:SQLクエリはちょうど使用せずに結果を取得し、ユーザーとポストテーブルのために参加したがDQLであなたは、両方のエンティティのために一部の参加が必要になります

さらに良いアプローチは、選択ポストエンティティで、その後、接合部の操作を行い、また、私はあなたのポストのエンティティが聞くという名前のエンティティを聞くためのマッピングを持っていると仮定注意します

SELECT p,COUNT(DISTINCT u.id) AS listenCount, 
FROM YourBundle:post p 
JOIN p.listen l 
JOIN l.user u 
WHERE p.id IN (' . $id . ') 
GROUP BY p.id