codeigniter中的嵌套查询

时间:2014-04-09 10:26:14

标签: php mysql codeigniter

有些不对劲

$this->db->where("Mark_ID,(SELECT Mark_ID FROM mark WHERE Course_ID=$Course_ID && Matric_No=$Matric_No)");

在我的模特中?有任何建议吗?谢谢。

 function update_record($Course_ID,$Matric_No)
     {  
         if($Course_ID && $Matric_No != NULL)
         {
         $data = array(
             //'Course_ID' => $this->input->post('Course_ID'),
             'Matric_No' => $this->input->post('Matric_No'),
             'Student_Name' => $this->input->post('Student_Name'),
             'Result_Mark_1' => $this->input->post('Result_Mark_1'),
             'Result_Mark_2' => $this->input->post('Result_Mark_2'),
             'Result_Mark_3' => $this->input->post('Result_Mark_3'),
             'Result_Mark_4' => $this->input->post('Result_Mark_4'),
             'Result_Mark_5' => $this->input->post('Result_Mark_5')

                 );

           $this->db->where("Mark_ID,(SELECT Mark_ID FROM mark WHERE Course_ID=$Course_ID && Matric_No=$Matric_No)");

           $this->db->update('mark', $data);
         }
     }

3 个答案:

答案 0 :(得分:2)

您需要使用IN()子句

$subquery="SELECT Mark_ID FROM mark WHERE Course_ID=$Course_ID && Matric_No=$Matric_No";
$this->db->where("Mark_ID IN($subquery)",null,FALSE);

但是您使用同一个表中的子查询进行更新,您将面临

的错误
  

您无法在更新查询中指定目标表

为此,您需要为子查询提供新别名,例如

$subquery="SELECT t.Mark_ID FROM(
           SELECT Mark_ID 
           FROM mark  
           WHERE Course_ID=$Course_ID && Matric_No=$Matric_No
           ) t ";

$this->db->where("Mark_ID IN($subquery)",null,FALSE);

答案 1 :(得分:0)

我建议您忘记嵌套查询,让您的生活更轻松。如果您仍想使用嵌套查询,则上面发布的答案是正确的。您需要使用 IN

function update_record($Course_ID,$Matric_No)
     {  
         if($Course_ID && $Matric_No != NULL)
         {
         $data = array(
             //'Course_ID' => $this->input->post('Course_ID'),
             'Matric_No' => $this->input->post('Matric_No'),
             'Student_Name' => $this->input->post('Student_Name'),
             'Result_Mark_1' => $this->input->post('Result_Mark_1'),
             'Result_Mark_2' => $this->input->post('Result_Mark_2'),
             'Result_Mark_3' => $this->input->post('Result_Mark_3'),
             'Result_Mark_4' => $this->input->post('Result_Mark_4'),
             'Result_Mark_5' => $this->input->post('Result_Mark_5')

                 );

            // pre update query
            $this->db->select('Mark_id');
            $this->db->where('Course_ID', $Course_ID);
            $this->db->where('Matric_No', $Matric_No);
            $tmp_result = $this->db->get();
            $result = $tmp_result->row();
            $mark_id = $result->Mark_id;

            //updation
           $this->db->where("Mark_ID",$mark_id);
           $this->db->update('mark', $data);
         }
     }

答案 2 :(得分:0)

我认为您可以使用以下代码获取结果。

$这 - > DB->选择(" Mark_id&#34);

$这 - > DB-化合物其中(" COURSE_ID",$ COURSE_ID);

$ get_id = $ this-> db-> get($ this-> tbl_user) - > row();

获取标记ID后,只需将其传递给下面的查询。

$ this-> db-> where(' Mark_id',$ get_id-> Mark_id);

$这 - > DB->更新($这 - > tbl_user,$数据);