【问题标题】:Doctrine: Order by alias with same name as column学说:按与列同名的别名排序
【发布时间】:2011-01-12 11:55:30
【问题描述】:

我有以下 DQL (Doctrine1.2):

$dql->select('sum(t.column1) column1, t.column2')
    ->from('Table t')
    ->groupBy('t.column2')
    ->orderBy('column1');

但生成的 SQL 与以下 DQL 相同:

$dql->select('sum(t.column1) column1, t.column2')
    ->from('Table t')
    ->groupBy('t.column2')
    ->orderBy('t.column1'); //Ordered by column1 not by sum(t.column1)

是否可以强制 Doctrine 使用别名 column1 而不是列名 t.column1

我需要这个,因为我希望两个非常相似的 DQL 的模型输出格式相同。 (最近由相同的模板呈现)。另一个 DQL 如下所示:

$dql->select('t.column1, t.column2')
    ->from('Table t')
    ->orderBy('t.column1');

可能的解决方法是选择sum(t.column1) 两次。第一次使用别名 column1,第二次使用其他别名,为什么在 passwd 之后使用 orderBy 函数,但这看起来不是最清晰的解决方案。

有什么建议吗?

谢谢

【问题讨论】:

    标签: php mysql doctrine doctrine-1.2


    【解决方案1】:

    你能试试这个方法吗?只需将“sum(t.column1)”按顺序排列,而不是尝试使用别名:

    $dql->select('sum(t.column1) as column1, t.column2')
        ->from('Table t')
        ->groupBy('t.column2')
        ->orderBy('sum(t.column1)');
    

    【讨论】:

    • 这可行,但会在 SQL 中生成ORDER BY SUM(t.columnt1)。看起来比两次选择列要好,但这是最好的解决方案吗? SQL 优化器是否识别它并只计算一次sum(t.column1)
    • @Petr 是的,除非您使用一些相当疯狂的数据库后端。这是一个古老的 SQL 习惯用法,所有现代引擎都会识别您在做什么并正确优化。 MySQL 肯定会好的。
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多