学说:GROUP BY HAVING

Mik*_*ike 4 doctrine

我正在尝试这样做:

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)

真的与学说挣扎.:(

prz*_*_li 7

您的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 wherehavingstatements中的定义.

所以正确的代码:

$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)

请注意重复的havingselect


小智 1

我认为你错过了“来自”声明