当前位置: 首页 > 面试题库 >

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

司马辉
2023-03-14
问题内容

我看到这对笨论坛

考虑以下代码

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数据库类对联接进行更新?


问题答案:

我发现的一种解决方案是完全删除联接并将联接条件移到“ 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');


 类似资料:
  • 我有一张像下面这样的桌子, ID姓名电子邮件性别 这个表中已经有了一些值。 现在,我用下面的查询来添加年龄。 alter table tblPerson add Age int 现在,我的行结构看起来像 ID姓名电子邮件性别年龄 现在,我有了年龄表。有任何查询可以将这些年龄添加到新创建的列中吗? 所有年龄都是根据ID排序的。因此,如果需要逻辑,则不需要。我只需要添加列数据。 谢谢

  • 问题内容: 我有2张桌子,如下所示: serial_table serial_key CHARACTER VARYING(20), PRIMARY KEY(id, serial_key) serial_rate: serial_key CHARACTER VARYING(20), rate NUMERIC, PRIMARY KEY(id, serial_key), FOREIGN KEY (id,

  • 问题内容: 我在这里找到了一些可以更新一个字段的东西:http : //www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different- values-and-a-single-sql- query/ 我的问题是如何更新多个字段?如: 这当然是行不通的。尝试了其他几种组合并失败了。任何的想法?谢谢! 问题答案:

  • 问题内容: 如何在相同的条件下运行 and 语句,而不必执行两个查询:一个选择对象一个更新对象 SQL中的等效内容如下所示: 问题答案: 使用queryset 对象方法:

  • 问题内容: 使用上面的代码,数据库kuis中表Writers的第三行值将使用new_value更新,并且输出将为 Number od rows更新:1 我应该如何同时更新多行? 问题答案: 可能您正在寻找cursor.executemany。

  • 问题内容: 使用上面的代码,数据库kuis中表Writers的第三行值将用new_value更新,并且输出将为 Number od rows更新:1 我应该如何同时更新多行? 问题答案: 可能您正在寻找cursor.executemany。