【问题标题】:Codeigniter correct JOIN requestCodeigniter 正确的 JOIN 请求
【发布时间】:2014-12-01 19:53:49
【问题描述】:

我有 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');

一切似乎都很好,但有一个问题。此代码仅返回 3 个事件中的 2 个事件 - id 为 1 和 4 的事件。据我了解,发生这种情况是因为事件 3 没有关注者。

那么如何正确获取所有事件并获取其关注者的数量,包括那些拥有 0 个关注者的事件?

【问题讨论】:

  • 即使对于这些 event_id 有多个 event_follows 条目,您是否获得了事件 1 和 2 的有效结果?我希望 group_by 总是返回值 1

标签: php mysql codeigniter activerecord


【解决方案1】:

为了从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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多