我想在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)。
怎么会这样?
答案 0 :(得分:1)
条件3:
ESTIMASI
和LAMA
均为空。ESTIMASI
为空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
<强>后续强>
如果ESTIMASI
和NOT 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);
我删除了数据库名称。将连接选择数据库名称,并且需要在此处提及它。