CodeIgniter-Inner Join 5个或更多表(SQL)

时间:2017-09-26 08:38:20

标签: php mysql sql codeigniter

我有5个表,我想内部加入它们但我的代码不起作用。有人能帮我吗?感谢

$query = $this->db->select('tblmastersection.*, tblsavesection.*,tblmastersecmolecular.*,tblmastersecpathology.*,tblmastersecparasitology.* ')
          ->from('tblmastersection')
          ->join('tblsavesection', 'tblmastersection.section_id = tblsavesection.section_id', 'inner')
           ->join('tblmastersecmolecular', 'tblsavesection.test_id = tblmastersecmolecular.test_id', 'inner')
          ->join('tblmastersecparasitology', 'tblsavesection.test_id = tblmastersecparasitology.test_id', 'inner')
            ->join('tblmastersecpathology', 'tblsavesection.test_id = tblmastersecpathology.test_id', 'inner')
            ->get();
    return $query->result();

1 个答案:

答案 0 :(得分:0)

我认为问题出在select电话中。查询生成器可能没有"转义"正确的字段列表会导致语句无效。

由于您希望所有五个表中的所有字段都可以使用。

$query = $this->db
    ->select('*')
    ->from('tblmastersection')
    ->join('tblsavesection', 'tblmastersection.section_id=tblsavesection.section_id', 'inner')
    ->join('tblmastersecmolecular', 'tblsavesection.test_id = tblmastersecmolecular.test_id', 'inner')
    ->join('tblmastersecparasitology', 'tblsavesection.test_id = tblmastersecparasitology.test_id', 'inner')
    ->join('tblmastersecpathology', 'tblsavesection.test_id = tblmastersecpathology.test_id', 'inner')
    ->get();

return $query->result();

上面的内容可以更简洁一些,但仍能产生相同的效果。查询构建器方法get()可以接受表的名称。所以使用

->get('tblmastersection') 

而不是

->from('tblmastersection')
//and later in the chain
->get()

另外,请注意,如果未提供select()方法,则假定为SELECT *

最后,将链式方法的返回值分配给$query不会带来任何好处,除非您想在使用之前检查$query是否有效。由于您未检查$query,请勿使用它。只需继续将->result()添加到链中并立即返回结果。

这里是使用这些知识的重写。

return $this->db
    ->join('tblsavesection', 'tblmastersection.section_id=tblsavesection.section_id', 'inner')
    ->join('tblmastersecmolecular', 'tblsavesection.test_id = tblmastersecmolecular.test_id', 'inner')
    ->join('tblmastersecparasitology', 'tblsavesection.test_id = tblmastersecparasitology.test_id', 'inner')
    ->join('tblmastersecpathology', 'tblsavesection.test_id = tblmastersecpathology.test_id', 'inner')
    ->get('tblmastersection')
    ->result();