4
と同じ名前を持つ別名順:ドクトリン:私はDQL(Doctrine1.2)を以下しているコラム
$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)
は、次のとおりです。
$dql->select('sum(t.column1) column1, t.column2')
->from('Table t')
->groupBy('t.column2')
->orderBy('column1');
しかし、生成されたSQLは、次のDQLのためのように同じですDoctrineに列名t.column1
の代わりに別名column1
を使用させることができますか?
非常に似ている2つのDQLのモデルから同じ出力形式を使用したいので、これが必要です。 (最近、同じテンプレートによってレンダリングされます)。他のDQLは次のようになります。
$dql->select('t.column1, t.column2')
->from('Table t')
->orderBy('t.column1');
可能性のある問題を回避するには、二回sum(t.column1)
を選択することです。最初にエイリアスcolumn1
で2度目の別名で、なぜpasswdの後にorderBy
関数になっているのですが、最も明白な解決策のようには見えません。
提案がありますか?
ありがとうございました
これは動作しますが、SQLに 'SUM(t.columnt1)BY' ORDERを生成します。列を2回選択するよりも優れていますが、これが最善の解決策ですか? SQLオプティマイザはそれを認識して 'sum(t.column1) 'を1回だけカウントしますか? –
@Petrはい、かなりクレイジーなDBバックエンドを使用している場合を除きます。それは昔ながらのSQLイディオムであり、現代のエンジンはすべて、あなたがやっていることを認識し、正しく最適化します。 MySQLは確かにうまくいくでしょう。 –