Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 条令查询连接子查询语法_Php_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Php 条令查询连接子查询语法

Php 条令查询连接子查询语法,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我一直在尝试将以下原始sql转换为dql,但四个小时都无法完成,你能帮我吗? 这个查询在数据库中找到重复的哈希,并给我订单的ID SELECT h.order_id FROM `Hash` h INNER JOIN (SELECT `order_id`,hash FROM `Hash` GROUP BY `hash` HAVING COUNT(*) > 1 ) dt ON h.hash=dt.hash ; 现在我的dql: SELECT h FROM PaymentBundle

我一直在尝试将以下原始sql转换为dql,但四个小时都无法完成,你能帮我吗? 这个查询在数据库中找到重复的哈希,并给我订单的ID

SELECT h.order_id
FROM `Hash` h
INNER JOIN (SELECT `order_id`,hash
FROM `Hash`
GROUP BY `hash`
HAVING COUNT(*)  > 1
) dt ON h.hash=dt.hash ;
现在我的dql:

    SELECT h FROM PaymentBundle:Hash h 
JOIN
 (SELECT h1.order, h1.hash FROM PaymentBundle:Hash h1 GROUP BY h1.hash HAVING COUNT(h1)  > 1) 
dt WITH h.hash = dt.hash
但是h1.order给出了语法错误,以及其他所有操作:

  [Semantical Error] line 0, col 40 near '(SELECT h1.hash': Error: Class '(' is not defined.  
我尝试将其作为子查询:

$subDql = 'SELECT h1 FROM PaymentBundle:Hash h1 GROUP BY h1.hash HAVING COUNT(h1)  > 1';
$subQuery = $this->getEntityManager()
 ->createQuery($subDql);

$dql = 'SELECT h FROM PaymentBundle:Hash h JOIN ('.$subQuery->getDQL().') dt ON h.hash = dt.hash';
$query = $this->getEntityManager()
  ->createQuery($dql);
return $query->getResult();
它给了我:

[条令\ORM\Query\QueryException] [语义错误]第0行,第40列“从中选择h1”:错误:类 没有定义

[条令\ORM\Query\QueryException] 从PaymentBundle中选择h:哈希h连接选择h1 PaymentBundle:按h1对h1组进行哈希。COUNTh1大于1 dt的哈希打开 h、 hash=dt.hash

我的解决方案:

$rsm = new ResultSetMappingBuilder($this->getEntityManager());
        $rsm->addRootEntityFromClassMetadata('PaymentBundle:Hash', 'h');

        $qb = $this->getEntityManager()->createNativeQuery("
               SELECT h.id, h.order_id
FROM `Hash` as h
INNER JOIN (SELECT `order_id`,hash
FROM `Hash`
GROUP BY `hash`
HAVING COUNT(*)  > 1
) dt ON h.hash = dt.hash
                 ", $rsm);
        return $qb->getResult();

据我所知,条令查询根本不接受子查询。在之前做子查询,然后输入返回到主查询的结果。我按你说的那样尝试过,它不起作用,请检查我的更新