当我尝试左连接时,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"事物"表获取列表时,我得到了预期的结果 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 个不在"喜欢"表中的"东西",而不是另一个,所以我对它是 JOIN 失败还是其他东西感到困惑。
已解决:通过将分组依据从"likes.thing_id"切换到"things.thing_id">
通过将GROUP BY
从 likes.thing_id
切换到 things.thing_id
来解决。
我的 3 个项目的结果是被分组为 Thing 2
、Thing 3
和 NULL
的结果,不在likes
表中的 2 个项目被分组为。