在codeigniter中加入两个表

时间:2011-11-21 14:54:16

标签: database codeigniter join

我想加入两张桌子。让我们说t1t2t1fk t2_id。但是当我运行代码时,我的视图中没有显示任何内容。

控制器:

 //..
 $data['city']= $this->state_model->name();
 $this->load->view('viewt', $data);

型号:

    function name(){
    $this->db->select('*');
    $this->db->from('state');
    $this->db->join('city', 'city.state_id = state.id');
    $sql = $this->db->get();

    if ($sql->num_rows () >0) {
        foreach($sql->result() as $row) {
        $this->db->where('state_id','state.id');
        $r = $this->db->get('city');
        }

    return $r->result();

     }
     else {
     return null;   
            }

查看:

 <?php foreach($city as $row):?>
  <?php echo $row->cityname; ?></br></br></br>
  <?php endforeach;?></br></br>

提前致谢

查询:

  SELECT `id`, `statename`
  FROM (`state`)
  ORDER BY `id` ASC

  SELECT *
FROM (`state`)
JOIN `city` ON `city`.`state_id` = `state`.`id`  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

4 个答案:

答案 0 :(得分:1)

你的$ r变量只有最后一次迭代,因此函数只会返回最后一个结果集,所以试试这个:

if ($sql->num_rows () >0) {
    foreach($sql->result() as $row) {
    $this->db->where('state_id',$row->state_id);
    $r[] = $this->db->get('city')->row();
    }

return $r;

答案 1 :(得分:0)

检查最新查询:$this->db->last_query()

答案 2 :(得分:0)

好的,所以你从你的加入中得到三条记录 - 所以我们知道这是有效的。但是你的其他3个查询看起来不正确。试试这个:

if ($sql->num_rows () >0) {
    $r = array();
    foreach($sql->result() as $row) {

        // here, you need to replace 'state.id' with the actual
        // results from your join query ($row->id which is the id
        // from the state table
        $this->db->where('state_id',$row->id);
        $r[] = $this->db->get('city')->result();
    }
    return $r;
 }
 else 
 {
     return null;   
 }

所以现在你应该有一个结果数组,并且可以在你的视图中使用foreach进行迭代。

答案 3 :(得分:0)

我不太明白为什么你需要在循环中进行第二次查询。你不能这样做:

if ($sql->num_rows() > 0) {
    return $sql->result();
}