【问题标题】:How to Delete select rows from multiple tables using Join - CodeIgniter如何使用 Join 从多个表中删除选择行 - CodeIgniter
【发布时间】:2021-02-09 08:10:13
【问题描述】:

如果其中一个表中的给定条件为真,我希望能够从中删除选择行的三个表。我正在使用 codeigniter。

我的表名称是:Register、Profiles 和 Profilesmember。所有 3 个表都有我要加入的“电子邮件”列。一个表“Register”有一个唯一的列“is_email_verfiied”——要么是“是”,要么是“否”。如果它是“否”,我想从表“register”以及其他两个表“Profiles”和“Profilesmember”中删除该列,这取决于在“email”列中包含匹配的整体。

这是我的模型:

    function databaseupdate ()
        {
        $verified = 'no';
        $tables = array('register', 'profiles', 'profilesmember');
        $this->db->from ('register');
        $this->db->join('profiles', 'profiles.email = register.email');
        $this->db->join('profilesmember', 'profilesmember.email = register.email');
        $this->db->where('register.is_email_verified', $verified);
        $this->db->delete($tables);
}

它会从“Register”表中删除正确的条目,但不会从第二个表 Profilesmember 或 Profiles 中删除(视情况而定)。

我得到的错误信息是

“‘where 子句’中的未知列‘register.is_email_verified’”。

我检查了“is_email_verified”列拼写正确,当然在Register表中确实存在(为清楚起见,其他2个表中不存在该列)。

最后一个 SQL 查询是

“从配置文件中删除 register.is_email_verified = 'no'”

【问题讨论】:

  • 可能类似于DELETE FROM profiles WHERE email IN (SELECT email FROM register WHERE is_email_verified = 'no')
  • 如果是我,我会从 sql 开始

标签: mysql codeigniter join delete-row


【解决方案1】:

所以我改变了我的方法并摆脱了 JOIN 的想法 - 这很有效:

function databaseupdate ()
            {
            $verified = 'no';
            $tables = array('register', 'profiles', 'profilesmember');
            $this->db->select('email');
            $this->db->from('register');
            $this->db->where('is_email_verified', $verified);
            $query = $this->db->get(); 
            $email = $query->row()->email;
            $this->db->where('email', $email);
            $this->db->delete($tables);
            }

【讨论】:

    猜你喜欢
    • 2011-03-28
    • 1970-01-01
    • 2014-02-11
    • 2011-02-16
    • 2010-10-21
    • 2012-03-11
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多