我正在尝试这样做:
SELECT
userId, count(userId) as counter
FROM
quicklink
GROUP BY
userId
HAVING
count(*) >= 3'
Run Code Online (Sandbox Code Playgroud)
在使用querybuilder的学说中,我得到了这个:
$query = $this->createQueryBuilder('q')
->select('userId, count(userId) as counter')
->groupby('userId')
->having('counter >= 3')
->getQuery();
return $query->getResult();
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
[Semantical Error] line 0, col 103 near 'HAVING count(*)': Error: Cannot group by undefined identification variable.
Run Code Online (Sandbox Code Playgroud)
真的与学说挣扎.:(
您的SQL 有效,您的查询构建器语句无效
所有原因db将按以下顺序执行该查询:
1. FROM $query = $this->createQueryBuilder('q')
2. GROUP BY ->groupby('userId') // GROUP BY
3. HAVING ->having('counter >= 3')
4. SELECT ->select('userId, count(userId) as counter')
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到它在使用后counter定义.
它的SQL Quirk.您不能使用select in where或havingstatements中的定义.
所以正确的代码:
$query = $this->createQueryBuilder('q')
->select('userId, count(userId) as counter')
->groupby('userId')
->having('count(userId) >= 3')
->getQuery();
return $query->getResult();
Run Code Online (Sandbox Code Playgroud)
请注意重复的having从select
| 归档时间: |
|
| 查看次数: |
19618 次 |
| 最近记录: |