【问题标题】:FLOW3 Doctrine2 :: SELECT b,count(b) FROM (SELECT a,b FROM x\y\z GROUP BY a) GROUP BY bFLOW3 Doctrine2 :: SELECT b,count(b) FROM (SELECT a,b FROM x\y\z GROUP BY a) GROUP BY b
【发布时间】:2011-12-24 06:36:36
【问题描述】:

我对 FLOW3 很陌生,对 Doctrine 也很陌生。

我只是在运行一些测试,我想学习或了解一些我以后会用到的技术。现在我被这个教义部分困住了,我想生成一些统计数据。

$results = $this->entityManager
    ->createQuery('SELECT version,count(version) 
        FROM (SELECT device, version 
            FROM \MyStuff\Stats\Domain\Model\Stat 
            WHERE 
                date > \'2011-10-01 00:00:00\' and 
                date < \'2011-10-02 00:00:00\' 
            GROUP BY device) GROUP BY version')
    ->getResult();

我也在其他地方问过,他们把我带到了Doctrine Docs。 好吧,现在有几个例子,但是这两个衬里是微不足道的,我找不到任何与这种子选择相关的例子。
所以我希望这里有人可以帮助我。

编辑:
我想用 dql 解决这个问题。
我尝试使用 querybuilder 解决这个问题,但有人告诉我 querybuilder != dql

编辑 2:
现在有人告诉我,doctrine2 不支持“FROM (SUBSELECT)”中的子选择,但它支持“... WHERE IN (SUBSELECT)”,并且可以将我的查询重写为 IN () 形式。好吧,现在想弄清楚。

编辑 3: 我无法将子查询重写为子查询。所以...... dql 不做子查询,没有其他方法可以用 dql 做我想做的事?!然后 dql 将缺少我要说的一个非常重要的功能。或者我只是没有看到某事。在这里?

编辑 4: 我终于得到了子查询,但它慢了大约 10 倍(4 秒而不是 0.4 秒),现在#doctrine 的一些教义专家告诉我,我应该改用 nativeQuery 函数。

编辑 5: 它现在使用 nativeQuery 工作,请参阅我的答案...

【问题讨论】:

    标签: doctrine-orm entitymanager subquery typo3-flow


    【解决方案1】:

    使用本机查询,它的工作原理就是这样......

    $rsm = new \Doctrine\ORM\Query\ResultSetMapping();
    $rsm->addScalarResult('version', 'version');
    $rsm->addScalarResult('count', 'count');
    $results = $this->entityManager
        ->createNativeQuery(
            'SELECT version, COUNT(version) as count FROM
            (
                SELECT device, version 
                FROM mystuff_stats_domain_model_stat 
                WHERE 
                    date > \'2011-10-01 00:00:00\' and 
                    date < \'2011-10-02 00:00:00\' 
                GROUP BY device
            ) 
            as devices GROUP BY version',$rsm)
        ->execute();
    echo var_dump($results,true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 2010-11-03
      • 2012-10-25
      • 2011-03-30
      • 1970-01-01
      • 2016-08-28
      • 2014-04-04
      • 1970-01-01
      相关资源
      最近更新 更多