2011-01-28 67 views
7

我的笨论坛笨 - 数据库:如何更新多个表有一个更新查询

看到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; 

这是你会怎么显然做的笨

$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的活动记录数据库类连接更新?

回答

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

我以为我会救一些人一些时间。您需要使用“表格作为”,否则CodeIgniter试图转义表格,并失败。 – 2013-06-01 05:40:01

4

transaction中使用两个单独的查询应解决您的问题。如果查询失败,另一个会回滚。