codeigniter - 数据库:如何使用单个更新查询更新多个表

时间:2011-01-28 16:07:45

标签: mysql database codeigniter activerecord

我在codeigniter论坛上看到了this

考虑以下代码

UPDATE a
INNER JOIN b USING (id)
SET a.firstname='Pekka', a.lastname='Kuronen',
b.companyname='Suomi Oy',b.companyaddress='Mannerheimtie 123, Helsinki Suomi'
WHERE a.id=1; 

这就是你在Codeigniter中显然会这样做的方式

$this->db->set('a.firstname', 'Pekka');
$this->db->set('a.lastname', 'Kuronen');
$this->db->set('b.companyname', 'Suomi Oy');
$this->db->set('b.companyaddress', 'Mannerheimtie 123, Helsinki Suomi');
$this->db->where('a.id', 1);
$this->db->join('table2 as b', 'a.id = b.id');
$this->db->update('table as a');

这在现实中不起作用。我看了一下这个产生的SQL,结果甚至没有提到连接。

有没有人知道如何使用Codeigniter的Active Record Database Class进行连接更新?

2 个答案:

答案 0 :(得分:11)

我找到的一个解决方案是完全删除连接并将连接条件移动到'where'函数中,您还需要更改更新字符串以包含新表。

$this->db->set('a.firstname', 'Pekka');
$this->db->set('a.lastname', 'Kuronen');
$this->db->set('b.companyname', 'Suomi Oy');
$this->db->set('b.companyaddress', 'Mannerheimtie 123, Helsinki Suomi');

$this->db->where('a.id', 1);
$this->db->where('a.id = b.id');
$this->db->update('table as a, table2 as b');

答案 1 :(得分:4)

transaction中使用两个单独的查询可以解决您的问题。如果查询失败,则另一个查询将被回滚。