【问题标题】:CodeIgniter - MySQL join when there are no rows in secound tableCodeIgniter - 当第二个表中没有行时 MySQL 连接
【发布时间】:2012-06-30 01:14:45
【问题描述】:

我在模型中有这个查询:

  public function Games() {
    $q = $this->db->select('games.id, games.title, games.slug, games.dev_id, games.dev, games.plat_id, games.plat');
    $q = $this->db->from('games');
    $q = $this->db->join('rates', 'games.id = rates.game_id');
    $q = $this->db->select_avg('rates.rate');
    $q = $this->db->get();
    return $q->result();
}

我的目标是列出来自games 的所有内容,另外在可用时从rates 获得平均rate。现在它只显示两个表中的那些行。我该如何解决这个问题?

【问题讨论】:

    标签: mysql codeigniter


    【解决方案1】:

    使用这条指令

    $this->db->select('games.id, games.title, games.slug, games.dev_id, games.dev, games.plat_id, games.plat');
    $this->db->select_avg('rates.rate');
    $this->db->from('games');
    $this->db->join('rates', 'games.id = rates.game_id','left');
    $this->db->group_by('rates.game_id');
    $q = $this->db->get();
    

    左连接会带来多个结果。使用 avg 和 group by 将限制为每条记录仅获取一行。

    【讨论】:

    • 我尝试使用leftouter left等,但没有任何结果; (另外,left 导致 idgames 转移到 rates,我不想这样做。
    • 对于平均费率,使用 $this->db->select_avg('rates.rate') 并将 game.id 的别名作为 GameId 以防止冲突
    • 以及为什么要在 $q 中分配每条指令。最后要使用的是按 rates.game_id 分组,一切都会完成
    • 是的,分组有帮助(出于某种原因,这根本不是必需的)。谢谢! (另外,请编辑您的答案,以便我投票;))
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多