2012-01-14 87 views
0

当我尝试加入左连接时,Codeigniter的活动记录似乎不会获取我所有的行。Codeigntier Active Record加入

DB设置(简体)

Things          Likes 
----------------------------------------  --------------------------- 
| thing_id | thing_name | user_id |  | thing_id | user_id | 
----------------------------------------  --------------------------- 
|  1  | Thing 1 | 5555 |  | 2  | 6666 | 
|  2  | Thing 2 | 5555 |  | 3  | 7777 | 
|  3  | Thing 3 | 5555 |  --------------------------- 
|  4  | Thing 4 | 5555 | 
----------------------------------------  

当我取反对“东西”表名单由USER_ID,我得到的4

$sql = $this->db->where('things.user_id', $user_id)->get('things')->result(); 

预期的结果但是,当我做到这一点,我得到3(东西2,4)。

$sql = $this->db->select('things.thing_id as thing_id, COUNT(likes.thing_id) as likes') 
        ->where("things.user_id", $user_id) 
        ->from('things') 
        ->join('likes', 'things.thing_id = likes.thing_id', 'LEFT') 
        ->group_by('likes.thing_id') 
        ->get() 
        ->result(); 

我很困惑,因为它并抢1“东西”是不是在“喜欢”表,而不是其他,所以我很困惑,如果它是一个JOIN失败,还是其他什么东西。

解决:通过从 'likes.thing_id' 切换GROUP BY为 'things.thing_id'

回答

0

通过从likes.thing_id切换GROUP BYthings.thing_id解决。

我的3项的结果是被分组为Thing 2Thing 3NULL,其中2项不在likes表分别被分组作为一个结果。