使用if else条件将SQL UPDATE语句转换为php(codeigniter)

时间:2015-07-03 03:06:28

标签: php mysql codeigniter

我想在Codeigniter中使用SQL Update语句制作php代码。

如果我在Codeigniter中执行代码,数据库中的数据也会更新。

我想更新一列(ID_STATUS),但有几个条件。

连接栏' ID_STATUS'列#39; lama'和' estimasi'

我的桌名是" pelayanan"。

ID_STATUS是来自表格"状态"的PK。

因此,表格中的ID_STATUS列" pelayanan"表格中的外键是#34; status"。

我尝试过这个查询,但是,如果还有条件,那就不是了。

条件1:

UPDATE `dbhpl`.`pelayanan` 
SET `pelayanan`.`ID_STATUS` = '1' 
WHERE `pelayanan`.`LAMA` <> `pelayanan`.`ESTIMASI`;

条件2:

UPDATE `dbhpl`.`pelayanan` 
SET `pelayanan`.`ID_STATUS` = '2' 
WHERE `pelayanan`.`LAMA` = `pelayanan`.`ESTIMASI`;

这是关于mysql的查询。但我想将该查询转换为PHP代码(Codeigniter)。

怎么会这样?

2 个答案:

答案 0 :(得分:1)

条件3:

  • a。 ESTIMASILAMA均为空。
  • b。 ESTIMASI为空
  • c。 LAMA为空

如果要根据ESTIMASI UPDATE `dbhpl`.`pelayanan` p SET p.`ID_STATUS` = CASE WHEN p.`LAMA` = p.`ESTIMASI` THEN '2' WHEN p.`LAMA` <> p.`ESTIMASI` THEN '1' WHEN p.`LAMA` IS NULL AND p.`ESTIMASI` IS NULL THEN p.`ID_STATUS` WHEN p.`LAMA` IS NULL THEN p.`ID_STATUS` ELSE p.`ID_STATUS` END 的值更新表中的所有行,可以使用一个UPDATE语句一次性更新。

ID_STATUS

请注意,将ID_STATUS列的当前值分配回LAMA列会导致&#34;无更新&#34;。

由于最后两个WHEN条件返回与ELSE相同的值,因此可以删除这些值。这些仅用于说明可能处理条件3

与原始文件的一个小区别是,它将尝试更新表中的每一行,包括ESTIMASI和/或WHERE中具有NULL值的行。这意味着将为这些行触发任何UPDATE触发器。要使完全与原始结果完全相同,您需要包含一个LAMA子句,该子句排除ESTIMASI为空或 WHERE p.`LAMA` IS NOT NULL AND p.`ESTIMASI` IS NOT NULL 为的行空值。例如:

  UPDATE `dbhpl`.`pelayanan` p 
     SET p.`ID_STATUS` = IFNULL((p.`LAMA`=p.`ESTIMASI`)+1,p.`ID_STATUS`)

至于如何在PHP中完成同样的事情,其他人也许能够回答这个问题。就个人而言,我只做一次SQL操作。

ANSI标准语法有点冗长。完成同样事情的MySQL特定版本有点短:

LAMA

<强>后续

如果ESTIMASINOT NULL定义为 $this->db ->set('ID_STATUS', 'IFNULL((`LAMA`=`ESTIMASI`)+1,`ID_STATUS`)', FALSE) ->update('`dbhpl`.`pelayanan`'); ,那么您就不必处理条件3 。 (在更一般的情况下,我们不一定有这种保证,所以我认为考虑到这些条件是更好的模式,即使它们在我们的特定情况下不会发生。< / p>

对于CodeIgniter ActiveRecord,您可以尝试这样的事情:

class Project extends \Eloquent {
    protected $fillable = [];

    public function users() {
        return $this->belongsToMany('User');
    }

    public function user() {
        return $this->belongsTo('User');
    }
}

答案 1 :(得分:1)

您的第一个查询是

UPDATE `dbhpl`.`pelayanan` 
SET `pelayanan`.`ID_STATUS` = '1' 
WHERE `pelayanan`.`LAMA` <> `pelayanan`.`ESTIMASI`;

将其转换如下:

$update_data=array('ID_STATUS'=>'1');
$this->db->where('LAMA <>','ESTIMASI');
$this->db->update('pelayanan',$update_data);

你的第二个问题是

UPDATE `dbhpl`.`pelayanan` 
SET `pelayanan`.`ID_STATUS` = '2' 
WHERE `pelayanan`.`LAMA` = `pelayanan`.`ESTIMASI`;

将其转换如下:

$update_data=array('ID_STATUS'=>'2');
$this->db->where('LAMA','ESTIMASI');
$this->db->update('pelayanan',$update_data);

我删除了数据库名称。将连接选择数据库名称,并且需要在此处提及它。