Codeigniter Activerecord加入

时间:2012-01-14 00:57:24

标签: php codeigniter activerecord

当我尝试JOIN LEFT时,Codeigniter的活动记录似乎没有抓取我的所有行。

数据库设置(简化)

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对'things'表获取列表时,我得到预期的结果为4。

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

但是当我这样做时,我得到3(第2,3和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();

我很困惑,因为它确实抓住了''''的东西'不在'like'表中,而不是另一个,所以我很困惑,如果它是JOIN失败,或其他什么。

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

1 个答案:

答案 0 :(得分:0)

通过将GROUP BYlikes.thing_id切换为things.thing_id来解决问题。

我的3个项目的结果是分组为Thing 2Thing 3NULL的结果,其中likes表中没有的2个项目被归为