PHP/MySQL的 - 如何检测是否仍然更新(笨)

问题描述:

前一列中的值相同,我有点到MySQL/PHP,请不要粗鲁PHP/MySQL的 - 如何检测是否仍然更新(笨)

我有一个名为“tbl_roguea”的表,它包含 “unitassid”,“unitass”和“rankid”,“rank”列。所有这些列都与信息填充这样的:

tbl_roguea样品

enter image description here

现在我有另一台名为“tbl_rogueb”为计算所有的行列并在车站,他们被分配。我的计数方法是调用存储过程,执行INSERT。如果我们关于以上表格:

tbl_rogueb样品

enter image description here

现在,每当我在tbl_roguea插入一行,tbl_rogueb将插入一行(如上面),并且tbl_roguea将被计数,没关系。 问题是什么如果我更新列“unitassid”,“unitass”和“rankid”,“排名”,但不会更改任何值。如果我使用相同的值更新了tbl_roguea中的值,如何在tbl_rogueb中不插入另一行。

这是从PHP示例代码:

public function rogueA_upGet() 
    { 
     $r_id = $this->input->post('mdl_a_id'); 
     $r_itemNR = $this->input->post('mdl_a_itemnr'); 

     $r_rankid = $this->input->post('mdl_a_rank'); 
     $r_rank = $this->input->post('hdmdl_rank'); 

     $r_lname = $this->input->post('mdl_a_lname'); 
     $r_fname = $this->input->post('mdl_a_fname'); 
     $r_mname = $this->input->post('mdl_a_mname'); 

     $r_desigid = $this->input->post('mdl_a_desig'); 
     $r_desig = $this->input->post('hdmdl_off'); 

     $r_unitassid = $this->input->post('mdl_a_unitass'); 
     $r_unitass = $this->input->post('hdmdl_uass'); 

     $r_dgov = $this->input->post('mdl_a_dgs'); 
     $r_dfir = $this->input->post('mdl_a_dfs'); 
     $r_lastp = $this->input->post('mdl_a_dlp'); 
     $r_dpprps = $this->input->post('mdl_a_DPPRPS'); 
     $r_daodco = $this->input->post('mdl_a_DPOD'); 
     $r_bday = $this->input->post('mdl_a_bday'); 
     $r_sa = $this->input->post('mdl_a_stat'); 

     $r_hitrainid = $this->input->post('mdl_a_hightr'); 
     $r_hitrain = $this->input->post('hdmdl_hitrain'); 

     $r_eligid = $this->input->post('mdl_a_elig'); 
     $r_elig = $this->input->post('hdmdl_elig'); 

     $r_educatt = $this->input->post('mdl_a_educatt'); 
     $r_sex = $this->input->post('mdl_a_sex'); 
     $r_relig = $this->input->post('mdl_a_rel'); 
     $r_civstat = $this->input->post('mdl_a_civstat'); 
     $r_add = $this->input->post('mdl_a_add'); 

     $data = array (
      'rogueA_itemNR' => $r_itemNR, 

      'rogueA_rankid' => $r_rankid, 
      'rogueA_rank' => $r_rank, 

      'rogueA_lname' => $r_lname, 
      'rogueA_fname' => $r_fname, 
      'rogueA_mname' => $r_mname, 

      'rogueA_desigid' => $r_desigid, 
      'rogueA_desig' => $r_desig, 

      'rogueA_unitass' => $r_unitass, 

      'rogueA_dgov' => $r_dgov, 
      'rogueA_dfir' => $r_dfir, 
      'rogueA_lastp' => $r_lastp, 
      'rogueA_dpprps' => $r_dpprps, 
      'rogueA_daodco' => $r_daodco, 
      'rogueA_bday' => $r_bday, 
      'rogueA_sa' => $r_sa, 
      'rogueA_educatt' => $r_educatt, 

      'rogueA_eligid' => $r_eligid, 
      'rogueA_elig' => $r_elig, 

      'rogueA_hitrainid' => $r_hitrainid, 
      'rogueA_hitrain' => $r_hitrain, 

      'rogueA_sex' => $r_sex, 
      'rogueA_relig' => $r_relig, 
      'rogueA_civstat' => $r_civstat, 
      'rogueA_add' => $r_add 
      ); 

     $this->db->where('rogueA_id', $r_id); 

      if($this->db->update('tbl_roguea',$data)){ 
       $this->trackermod->log_rA_update($log_itemNR,$log_comname); 

       if($this->db->query('call rogue_A_update("'.$data['rogueA_id'].'","'.$data['rogueA_unitassid'].'")')) 
       { 
        return true; 
       }else { 

        if($data['rogueA_unitassid'] == '4' || $data['rogueA_unitassid'] == '5') 
         { 
          $this->db->query('call rogue_B_SusaMer("4","Emergency Medical & Rescue Services/Susana Heights Sub-Station");'); 
         } 
        else if($data['rogueA_unitassid'] == '1' || $data['rogueA_unitassid'] == '2' ||$data['rogueA_unitassid'] == '3') 
         { 
          $this->db->query('call rogue_B("'.$data['rogueA_unitassid'] .'","'.$data['rogueA_unitass'] .'","'.$data['rogueA_unitassid'] .'");'); 
         } 
        else 
         { 
          return false; 
         } 
         $this->db->query('CALL rogue_B_TOTAL();'); 
         return true; 

       } 

      } 
     else{ 
      return $this->db->error(); 
      return true; 
      } 
} 

对不起,我的语法错误。非常感谢你回答我的问题。


编辑: “tbl_rogueb结构”

字段类型空键默认额外


rogueB_id INT(11)NO PRI(NULL)的auto_increment
rogueB_unitid INT(11)是(NULL)
rogueB_unit varchar(100)是(NULL)
rogueB_off_DIR int(11)是0
rogueB_off_CSUPT INT(11)是0
rogueB_off_SSUPT INT(11)是0
rogueB_off_SUPT INT(11)是0
rogueB_off_CINSP INT(11)是0
rogueB_off_SINSP INT(11)是0
rogueB_off_INSP INT (11)是0
rogueB_off_M INT(11)是0
rogueB_off_F INT(11)是0
rogueB_off_TOTAL INT(11)是0
rogueB_noff_SFO4 INT(11)是0
rogueB_noff_SFO3 INT(11)是0
rogueB_noff_SFO2 INT(11)是0
rogueB_noff_SFO1 INT(11)是0
rogueB_noff_FO3 INT(11)是0
rogueB_noff_FO2 INT(11)是0
rogueB_noff_FO1 INT(11 )YES 0
rogueB_noff_M INT(11)是0
rogueB_noff_F INT(11)是0
rogueB_noff_TOTAL INT(11)是0
rogueB_TOTAL_UP INT(11)是0
rogueB_NUP _Total INT(11)是0
rogueB_NUP_M INT(11)是0
rogueB_NUP_F INT(11)是0
rogueB_TOTAL_OVERALL INT(11)是0
rogueB_stamp VARCHAR(100)是(NULL)

注:我无法添加其他图片。对不起,很长的职位。

作为程序员,我可以建议使用选项2.将应用程序中的所有逻辑和数据库用作存储是一个很好的做法。在这种情况下,只需通过更改application/config/database.php中的数据库类型即可轻松更改数据库类型以与您的应用程序一起使用。

通常,如果您选择选项2,则可以在sql表中添加status或creation_date/deletion_date列,并根据这些值创建逻辑。这是一种版本控制,需要做很多事情,但是您可以使其可重用,并从应用程序其他部分的代码部分获益。

+0

感谢您的建议@Siniša。 也许我会尽量在稍后加强我的代码。但很高兴知道你的编程方式。对我而言,我认为将这些代码放在我的数据库上会有更多的服务器流量。你不觉得吗? – Quer

+0

也许有点但这可以忽略不计。但还有一个更优雅的解决方案,我上次忘了提及。您可以使用Codeigniter验证类(如果您使用的是Codeigniter)。以下是示例:https://www.codeigniter.com/userguide3/libraries/form_validation.html#cascading-rules。 –

+0

是的!我正在使用CI!纠正我,如果我认为是错误的, 我将使用'$ this-> form_validation-> set_rules('email','Email','required | valid_email | is_unique [users.email]');' * * is_unique **是我需要的,对吧? @Siniša – Quer