【问题标题】:Semantical Error, Symfony DQL语义错误,Symfony DQL
【发布时间】: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 关系。许多排名可以链接到用户。在我的请求中,我想获取每个用户的最后排名...请问您有什么想法吗?

标签: symfony dql


【解决方案1】:

使用原生查询

$rsm = new ResultSetMapping();
$sql = " 
    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
";

$result = $this->getEntityManager()->createNativeQuery($sql, $rsm)->getResult();

【讨论】:

  • 谢谢!但我有这个错误:找不到名为“SELECT * FROM td_user u JOIN td_ranking ranking ONranking.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"
  • 哦,是的!谢谢!有用!最后,我没有更多错误,但查询返回一个空数组
  • 在 db 中运行查询以检查查询结果。可能是数据库没有关于查询的记录
  • 只检查选择id而不在select语句中使用*。
  • 始终为空 =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2015-03-10
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多