Php 原则:按别名排序,与列同名
我有以下DQL(Doctrine1.2): 但生成的SQL与以下DQL相同: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->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)');