【发布时间】:2017-01-02 13:57:25
【问题描述】:
我有一个使用 MySQL 可以正常执行的查询:
SELECT *
FROM td_user u
JOIN td_ranking ranking ON ranking.user_id = u.id
JOIN (
SELECT x.user_id,
MAX(x.id) AS default_id
FROM td_ranking x
GROUP BY x.user_id
) y
ON y.user_id = ranking.user_id
AND y.default_id = ranking.id
我尝试在 DQL 中转换它以便在 Symfony 中运行它:
$query = $this->_em->createQuery('
SELECT u.*,ranking.*
FROM UserBundle:User u
JOIN UserBundle:Ranking ranking
WITH ranking.user_id = u.id
JOIN (
SELECT x.user_id, MAX(x.id) AS default_id
FROM UserBundle:Ranking x
GROUP BY x.user_id
) y
ON y.user_id = ranking.user_id
AND y.default_id = ranking.id'
);
$results = $query->getResult();
我有这个错误:
[Semantical Error] line 0, col 113 near '(SELECT x.user_id,': Error: Class '(' is not defined.
请问您有什么想法吗?谢谢!
【问题讨论】:
-
您没有排名实体的 user_id 属性。
-
哦,是的...但是该怎么做呢?我试试这个,但结果是一样的:“ SELECT u.*,ranking.* FROM UserBundle:User u JOIN UserBundle:Ranking ranking WITH ranking.user_id = u.id JOIN ( SELECT x.user, MAX(x.id) AS default_id FROM UserBundle:Ranking x GROUP BY x.user) y ON y.user = ranking.user AND y.default_id =ranking.id"
-
事实上,我在用户和排名之间存在 OneToMany 关系。许多排名可以链接到用户。在我的请求中,我想获取每个用户的最后排名...请问您有什么想法吗?