【问题标题】:Get Max of AVG in Symfony 2.4 Doctrine在 Symfony 2.4 Doctrine 中获取 Max of AVG
【发布时间】:2014-04-23 08:21:07
【问题描述】:

我需要在 symfony 学说中获得 AVG 列表的 MAX

我获得平均值的学说查询如下:

SELECT p,AVG(p.pathTime) as avgtime 
FROM ShopperAnalyticsEntityBundle:Path p 
 JOIN p.shopper sh JOIN p.floor f 
 JOIN f.store s 
WHERE p.floor=".$floorId." ".$filter." 
GROUP BY p.xPath, p.yPath

为了获得平均值列表的最大值,我将其修改为(在引用 this 之后):

SELECT MAX(avgtime) as maxtime 
FROM (SELECT p,AVG(p.pathTime) as avgtime 
      FROM ShopperAnalyticsEntityBundle:Path p 
       JOIN p.shopper sh 
       JOIN p.floor f 
       JOIN f.store s 
      WHERE p.floor=".$floorId." ".$filter." 
      GROUP BY p.xPath, p.yPath)

我收到以下错误:

[Semantical Error] line 0, col 38 near '(SELECT p,AVG(p.pathTime)': Error: Class '(' is not defined

所以我切换到原生 SQL 以获得相同的结果:

$maxSQL   = "SELECT MAX(t.avgtime) as maxtime FROM ( SELECT AVG(p.path_time) as avgtime FROM  path p JOIN shopper sh JOIN floor f JOIN store s WHERE p.floor_id=".$floorId." ".$filter." GROUP BY p.x_path, p.y_path ) t ";

$connection = $em->getConnection();
$statement = $connection->prepare($maxSQL);
$statement->execute();
$results = $statement->fetchAll();

我得到了结果,但是 SQL 需要 23.4457 秒才能运行

谁能在 Doctrine 中提出一个简单的方法来解决这个问题。

【问题讨论】:

  • 你使用什么样的数据库引擎? MySQL ?您将需要创建自己的原则扩展以匹配所需的行为。

标签: php sql symfony doctrine-orm symfony-2.4


【解决方案1】:

你应该这样使用 dotrine:

$query = Doctrine_Query::create()
  ->select('MAX(avgtime) as maxtime ')
  ->from('(SELECT p,AVG(p.pathTime) as avgtime 
           FROM ShopperAnalyticsEntityBundle:Path p 
           JOIN p.shopper sh 
           JOIN p.floor f 
           JOIN f.store s 
           WHERE p.floor=".$floorId." ".$filter." 
           GROUP BY p.xPath, p.yPath)
        ')
  ->execute();

你是怎么做到的?

【讨论】:

  • 感谢您的回答@Healkiss 我使用 Symfony 2.4 我无法找到类 Doctrine_Query
  • 可能在控制器中使用 $this->getContainer()->get('doctrine')->getManager()->createQuery(...)。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 2013-11-30
  • 2017-02-19
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
相关资源
最近更新 更多