在select子句中重用doctrine别名

时间:2016-07-08 08:22:25

标签: php mysql doctrine-orm doctrine

我在Doctrine中有以下SELECT子句(查询本身是使用查询构建器创建的):

u.username, MAX(p.score) as highscore, SUM(pc.badgeCount) as badgeCount, (SUM(pc.badgeCount) / :badgeSum) AS probability, (-LOG(RAND()) * probability) as weight

p是主要实体的别名,pc是加入的实体)

这给了我一条来自MySQL的错误消息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'probability' in 'field list'

如何在同一个SELECT子句中重用创建的别名?

2 个答案:

答案 0 :(得分:4)

我不会将其称为“重用”。相反,我将其称为“使用”。

GROUP BYHAVINGORDER BY子句之前,不能使用别名。

另一种可能是使用@variable:

u.username,
MAX(p.score) as highscore,
SUM(pc.badgeCount) as badgeCount,
@prob := (SUM(pc.badgeCount) / :badgeSum) AS probability,
(-LOG(RAND()) * @prob) as weight

“ AS”部分仍提供用于显示以及后面的子句的列名。同时,@prob“立即”提供一个值。

我之所以说“可能”,是因为我认为@variables的这种使用正在消失。 SELECT元素的评估顺序在标准中可能是“未定义”的。上面显示的用法取决于要按词汇顺序执行的元素。

答案 1 :(得分:0)

尝试使用addSelect(your_select)AS my_alias,然后再将其用于您的目的:

$myQuery->addSelect('(<my select>) AS my_alias');
$myQuery->orderBy('my_alias');

请将结果告诉我:)