简体   繁体   English

主义将带有子查询的SQL转换为DQL

[英]Doctrine convert SQL with subquery to DQL

I'm using Doctrine and DQL function createQuery() and I have this query : 我正在使用Doctrine和DQL函数createQuery()并且有以下查询:

SELECT id, 1 + (
    SELECT count( * )
    FROM user a
    WHERE a.points > b.points ) AS RNK, points
FROM user b

This query return a rank calculated with the field points . 该查询返回使用字段points计算的等级。

How can I convert this query for use in createQuery() ? 如何转换此查询以在createQuery()中使用?

For now I have : 现在我有:

$query = $this->getEntityManager()->createQuery("
    SELECT id, 1+(
        SELECT count(*) 
        from AppBundle\Entity\User a 
        WHERE a.points > b.points) as RNK, points 
    FROM AppBundle\Entity\User b
");

But this return a syntax error : "[Syntax Error] line 0, col 14: Error: Expected Literal, got 'SELECT'" 但这会返回语法错误: "[Syntax Error] line 0, col 14: Error: Expected Literal, got 'SELECT'"

try this : 尝试这个 :

$query = $this->getEntityManager()->createQuery("
SELECT b.id, 1+(
    SELECT count(a) 
    from AppBundle\Entity\User a 
    WHERE a.points > b.points) as RNK, points 
FROM AppBundle\Entity\User b");

Because you want to get the number of the same entity (USER), why not simply do : 因为您要获取同一实体(USER)的编号,所以为什么不简单做一下:

$query = $this->getEntityManager()->createQuery("
    SELECT u.id, 1+count(u.*) as RNK, u.points FROM AppBundle\Entity\User u
");

from the doc : doctrine chap 14.2.4 : 来自doc: 学说14.2.4

$query = $em->createQuery('SELECT COUNT(u.id) FROM Entities\User u');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM