【问题标题】:Codeigntier Active Record JoinCodeigniter 活动记录加入
【发布时间】:2012-01-14 00:57:23
【问题描述】:

当我尝试 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();

我很困惑,因为它确实抓住了 1 个不在“like”表中的“东西”,但没有抓住另一个,所以我很困惑它是 JOIN 失败还是其他什么。

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

【问题讨论】:

    标签: php codeigniter activerecord


    【解决方案1】:

    通过将GROUP BYlikes.thing_id 切换到things.thing_id 来解决。

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

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      相关资源
      最近更新 更多