我有2个表,其中包含下一个构造和数据:
表 1 - 事件:
id name about owner_id
1 Event1 <description> 2
2 Event2 <description> 1
3 Event3 <description> 2
4 Event4 <description> 2
表2 - event_follows
id event_id user_id
1 1 2
2 4 2
我需要获取当前用户(即 id 为 2 的用户)的所有事件并加入此事件的关注者计数。现在我正在使用以下代码:
$this->db->select('events.*, COUNT(event_follows.id) as followers')
->from('events')
->where('events.owner_id', $id); // $id - equals 2
$this->db->join('event_follows', 'event_follows.event_id = events.id', 'left')
->group_by('event_follows.event_id');
一切似乎都很好,但有一个问题。此代码仅返回 2 个事件(共 3 个) - ID 为 1 和 4 的事件。据我了解,发生这种情况是因为事件 3 没有关注者。
那么如何正确获取所有事件并获取其关注者的数量,包括那些有 0 个关注者的事件呢?
为了从events
表中获取所有行,您需要按events.id
而不是event_follows.event_id
$this->db->select('events.*, COUNT(event_follows.id) as followers')
->from('events')
->where('events.user_id', $id); // $id - equals 2
$this->db->join('event_follows', 'event_follows.event_id = events.id', 'left')
->group_by('events.id'); //change to events.id