2012-03-28 62 views
0
$qb = $this->createQueryBuilder('t'); 

    return $qb 
     ->join('t.customers', 'c') 
     ->where($qb->expr()->eq('t.user', $user->getId())) 
     ->andWhere($qb->expr()->gt($qb->expr()->count('c'), 0)) 
     ->orderBy('t.name')->getQuery()->getResult(); 

上面的查詢使用GROUP(Doctrine2產生的一個)是給我這個錯誤:獲得「#1111 - 無效使用組功能的」沒有在MySQL

#1111 - Invalid use of group function

,但奇怪的是我」 m不使用GROUP BY。任何幫助非常感謝,謝謝。

SELECT t0_.id AS id0, 
     t0_.slug AS slug1, 
     t0_.name AS name2, 
     t0_.description AS description3, 
     t0_.user_id AS user_id4 
FROM tag t0_ 
    INNER JOIN customers_tags c2_ ON t0_.id = c2_.tag_id 
     INNER JOIN customer c1_ ON c1_.id = c2_.customer_id 
WHERE t0_.user_id = 1 AND COUNT(c1_.id) > 0 
ORDER BY t0_.name ASC 

回答

7

您在where子句中使用了不允許的聚合函數count()

條件對聚合函數需要不使用進入HAVING子句

.... 
WHERE t0_.user_id = 1 
HAVING count(c1_.id) > 0 

當然,你需要使用GROUP BY得到正確的結果(雖然MySQL將可能讓你得逞一個GROUP BY - 但隨後的結果是不可預知)

0

「計數」不能在沒有通過組數是「分組功能」

2

無需在連接和havings使用。只需使用SIZE功能:

$qb->where('SIZE(t.customers) = 0'); 

這會給你不附帶客戶

+0

先生,你讓我一天都行。自24小時以來一直苦苦掙扎,對數組集合(數組集合中的指定項目或數組集合的大小爲0)進行雙重檢查,這種方法完美無缺。 – YumeYume 2017-01-13 08:46:04

+0

這應該是被接受的答案:) – 2018-01-25 20:29:17