【问题标题】:Aggregate values in Doctrine_RawSql queriesDoctrine_RawSql 查询中的聚合值
【发布时间】:2010-02-18 09:03:34
【问题描述】:

是否可以在 Doctrine_RawSql 查询中使用聚合值?这是我正在尝试做的事情:

$q = new Doctrine_RawSql();
$q->select('{q.*}, AVG(a.value) AS avg');
$q->from('-- complex from clause');
$q->addComponent('q', 'Question');

但是,Doctrine 创建的 SQL 仅保留表 question 中的列,并省略聚合值 avg

【问题讨论】:

  • 首先尝试为别名“a”添加组件(查询中有“a.value”)。
  • 我正在努力实现同样的目标,但我也遇到了困难。从那以后你修了吗?

标签: php doctrine doctrine-1.2


【解决方案1】:

我以前从未使用过 Doctrine_RawSql,但我使用以下两种方法之一通过 Doctrine 完成了原始 SQL 查询:

Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc("YOUR SQL QUERY HERE");

$doctrine = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
$result = $doctrine->query('YOUR SQL QUERY HERE');

这两种方法似乎会使您的原始 SQL 保持不变。

我应该注意,我在 Symfony 1.4 应用程序的上下文中使用 Doctrine 1.2,但是 AFAIK,无论您使用什么其他框架,这都对您有用。

【讨论】:

  • 我选择使用第一个解决方案,因为我必须使用 LOJ 通过可能存在于一个中而不存在于另一个中的值来链接两个表。但我也有一个 where 子句并且不知道如何绑定值,您实际上可以将一组占位符 => 值作为第二个参数传递给fetchAssoc,类似于fetchAssoc('SELECT * FROM user WHERE id = :userId'), array('userId' => $user->getId());
【解决方案2】:

你看过doctrine cookbook section on aggregates吗?他们在实体管理器上使用createQuery 方法而不是RawSql 对象。

我不是教义方面的专家,但这可能是一个很好的起点!

【讨论】:

  • 我的问题适用于 Doctrine 1.x。 Doctrine 2.0 完全不同。
【解决方案3】:

尝试将聚合字段放入 SQL 中,然后使用大括号获取它。 我正在使用 SQL 子查询。

$q = new Doctrine_RawSql();
$q->select('{s.*}, {s.avg} AS avg');
$q->from('(SELECT q.*, AVG(value) AS avg FROM Question AS q) AS s');
$q->addComponent('s', 'Question');

它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多