2017-08-07 115 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