2017-08-07 106 views
0

我需要將此sql查詢更改爲原則查詢或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 

我的問題是,括號內的文字中的「FROM」面前,這需要在dql類名。但是由於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