Php 原则:按别名排序,与列同名

Php 原则:按别名排序,与列同名,php,mysql,doctrine,doctrine-1.2,Php,Mysql,Doctrine,Doctrine 1.2,我有以下DQL(Doctrine1.2): 但生成的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) 是否可以强制条令使用别名column1而不是列名t.co

我有以下DQL(Doctrine1.2):

但生成的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)
是否可以强制条令使用别名
column1
而不是列名
t.column1

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

$dql->select('t.column1, t.column2')
    ->from('Table t')
    ->orderBy('t.column1');
可能的解决方法是选择两次
sum(t.column1)
。第一次使用别名
column1
,第二次使用其他别名,为什么在传递到
orderBy
函数之后,它看起来不是最清晰的解决方案

有什么建议吗


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

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

这是可行的,但会将按和排序(t.columnt1)生成SQL。看起来比两次选择列要好,但这是最好的解决方案吗?SQL optimizer是否识别它并只计算一次
sum(t.column1)
。这是一个古老的SQL习惯用法,所有现代引擎都会识别您正在做的事情并正确地进行优化。MySQL肯定会好的。
$dql->select('sum(t.column1) as column1, t.column2')
    ->from('Table t')
    ->groupBy('t.column2')
    ->orderBy('sum(t.column1)');