2013-03-13 69 views
0

我有以下查詢教義:學說多行GROUPBY算

生成的SQL是:

SELECT q.id AS q__id, q.user_id AS q__user_id, COUNT(u.id) AS u__0 FROM question q LEFT JOIN answer a ON q.id = a.question_id LEFT JOIN user_answer u ON a.id = u.answer_id GROUP BY u.user_id 

而這個查詢在MySQL的結果是這樣的:

+-------+------------+------+ 
+ q__id + q__user_id + u__0 + 
+-------+------------+------+ 
+  1 +   1 + 0 + 
+-------+------------+------+ 
+ 26 +   6 + 2 + 
+-------+------------+------+ 
+ 26 +   6 + 1 + 
+-------+------------+------+ 

使用Doctrine,有一種方法可以獲得「u__0」列值嗎?

我嘗試:

$questions = $q->execute(); 
echo (count($questions)); 

但結果僅具有2行(未3)。

如何獲得「u__0」列值? (0,2,1)使用Doctrine?

回答

1

我改變SQL查詢:

$q = Doctrine_Query::create() 
    ->select("q.id, q.user_id, a.id, count(ua.id) as quantity") 
    ->from("Answer a") 
    ->leftJoin("a.Question q") 
    ->leftJoin("a.UserAnswers ua") 
    ->groupBy("ua.user_id"); 

和它的作品;)

2

你必須循環每個結果和檢索quantity值:

$q = Doctrine_Query::create() 
    ->select("q.id as id, q.user_id as question_user_id, ua.user_id as answer_user_id, count(ua.id) as quantity") 
    ->from("question q") 
    ->leftJoin("q.Answers a") 
    ->leftJoin("a.UserAnswers ua") 
    ->groupBy("answer_user_id"); 

$results = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY); 
foreach ($results as $result) 
{ 
    var_dump($result['quantity']); 
} 
+0

我的問題是,使用學說我只得到2個結果(在普通的SQL中,我得到3個結果),我認爲學說將兩個最後的結果「分組」。 – Pipe 2013-03-13 18:49:03

+0

@Pipe哦,我明白了!對不起,我誤解了,我已經更新了我的答案。也許,如果你強制教條使用別名來分組,它就會起作用。順便說一下,我認爲你必須在select中添加ua.user_id。 – j0k 2013-03-14 09:20:01

+0

nop,它會拋出錯誤:別名'a'和'ua'之間連接的左側必須至少有主鍵字段被選中。 – Pipe 2013-03-14 13:39:51