原则:按与列同名的别名排序

发布于 2024-10-11 18:29:39 字数 888 浏览 2 评论 0原文

我有以下 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 函数之后,但这看起来不是最清晰的解决方案。

有什么建议吗?

谢谢

I have following DQL (Doctrine1.2):

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

But the generated SQL is same like for the following 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)

Is it possible to force Doctrine to use alias column1 instead of the column name t.column1?

I need this, because I would like to have same output format from model for two very similar DQLs. (lately rendered by the same template). The other DQL looks like this:

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

Possible workaround is to select sum(t.column1) twice. First with alias column1 and second time with some other alias, why is after passwd to the orderBy function, but it's does not look like the clearest solution.

Any suggestions?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

琉璃梦幻 2024-10-18 18:29:39

你能尝试一下这个方法吗?只需将“sum(t.column1)”放在 order by 中,而不是尝试使用别名:

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

Could you try this approach? Just put the "sum(t.column1)" in the order by, instead of trying to use the alias:

$dql->select('sum(t.column1) as column1, t.column2')
    ->from('Table t')
    ->groupBy('t.column2')
    ->orderBy('sum(t.column1)');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文