Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将带有子查询的SQL转换为DQL_Php_Mysql_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

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

Php 将带有子查询的SQL转换为DQL,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,我正在使用Doctrine和DQL函数createQuery(),我有这个查询: SELECT id, 1 + ( SELECT count( * ) FROM user a WHERE a.points > b.points ) AS RNK, points FROM user b 此查询返回使用字段points计算的排名 如何转换此查询以在createQuery()中使用 目前我有: $query = $this->getEntityManager()-

我正在使用Doctrine和DQL函数
createQuery()
,我有这个查询:

SELECT id, 1 + (
    SELECT count( * )
    FROM user a
    WHERE a.points > b.points ) AS RNK, points
FROM user b
此查询返回使用字段
points
计算的排名

如何转换此查询以在createQuery()中使用

目前我有:

$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
");
但这会返回一个语法错误:
“[syntax error]第0行,第14列:错误:应为文本,获得了“SELECT”

请尝试以下操作:

$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");

因为您想获得相同实体(用户)的编号,为什么不简单地执行以下操作:

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

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