左连接Doctrine查询

时间:2014-05-29 11:19:21

标签: php sql join doctrine-orm

我有2个表,我想加入doctrine left join。我希望结果能够显示我的"用户表"即使得分表上没有用户数据。 而且我希望它在我查询其他月份时仍能显示每个用户。

我的用户表"作为主要表格

 userid | username | usergroup
------------------------------
   1    | AAAA     |    A
   2    | BBBB     |    A
   3    | CCCC     |    B
   4    | DDDD     |    C

这是我的"得分表"加入"用户表"

 scoreid | userid | month | game1 | game2 
-----------------------------------------
   1     |   1    |   1   |   80  |  80   
   2     |   1    |   2   |   60  |  90
   3     |   3    |   1   |   80  |  70

当我选择usergroup = A且month = 1

时,我希望它看起来像这样
 username | game1 | game2 
---------------------------
   AAAA   |  80   |  80   
   BBBB   |  NULL |  NULL   

这是我到目前为止所做的。这不是我的实际学说代码。

->select('u.username','s.game1','s.game2')
->from('xxxxxxx:User', 'u')
->leftJoin('xxxxxxx:Score', 's', 'WITH', 'u.userid = s.userid')
->where('u.usergroup = :group')
->andWhere('s.month = :month OR s.month is NULL')

问题是当我尝试再次使用例如month = 2进行查询时,查询结果为空或者没有显示来自"用户表"的所有用户,因为我只过滤了相等的月或当它的NULL。 如何进行查询,以便我仍然可以每个月查询每个用户?

任何帮助都将非常感激。感谢

1 个答案:

答案 0 :(得分:0)

好的,感谢Prava的链接。所以我想出来解决这个问题。

->select('u.username','s.game1','s.game2')
->from('xxxxxxx:User', 'u')
->leftJoin('xxxxxxx:Score', 's', 'WITH', 'u.userid = s.userid AND s.month =:month')
->where('u.usergroup = :group')