phpcodeigniterjoinsql-updatequery-builder

How update a table in codeigniter with inner join?


I want to convert this query Mysql in Query Builder Codeigniter

The query is works in mysql but don't works in codeigniter

Mysql

UPDATE tbl_person p
INNER JOIN tbl_family_victim f  ON  p.id_person = f.id_person
SET p.active = 0
WHERE f.id_prisoners = 32;

Codeigniter

public function delete_all($id_pris){
   $this->db->join('tbl_family f','p.id_person = f.id_person');
   $this->db->set('p.active', '0');
   $this->db->where('f.id_prisoners', $id_pris);
   $data_result = $this->db->update('tbl_person p');
   return  $data_result;
}

Solution

  • You have minute error in your script, you missed alias of slave table

    VERSION 1

    public function delete_all($id_pris){
       $this->db->join('tbl_family f','p.id_person = f.id_person',"inner"); // you missed `f` here
       $this->db->set('p.active', '0');
       $this->db->where('f.id_prisoners', $id_pris);
       $data_result = $this->db->update('tbl_person p');
       return  $data_result;
    }
    

    This should work fine.

    VERSION 2

    $this->db->set('p.active', '0');
    $this->db->where('f.id_prisoners', $id_pris);
    $this->db->where('p.id_person = f.id_person')
    $data_result = $this->db->update('tbl_family as f, tbl_person as p');
    return $data_result;
    

    VERSION 3

    $sql = "
    UPDATE tbl_person p
    INNER JOIN tbl_family_victim f  ON  p.id_person = f.id_person
    SET p.active = 0
    WHERE f.id_prisoners = $id_pris";
    $this->db->query($sql);
    

    VERSION 4

    $this->db->set('p.active', '0');
    $this->db->where('f.id_prisoners', $id_pris);
    $data_result = $this->db->update('tbl_family as f JOIN  tbl_person as p ON p.id_person = f.id_person');
    return $data_result;