Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL删除与联接_Php_Mysql_Codeigniter_Join - Fatal编程技术网

Php SQL删除与联接

Php SQL删除与联接,php,mysql,codeigniter,join,Php,Mysql,Codeigniter,Join,为什么下面的查询不起作用?在SQL中删除以下五个表行的最佳方法是什么?我怎样才能修好它 //$id = $this->input->post('id'); $id = '65'; $this->db->query(" DELETE table_1, table_2, table_3, table_4, table_5 FROM table_1 JOIN table_2 ON table_1.id = t

为什么下面的查询不起作用?在SQL中删除以下五个表行的最佳方法是什么?我怎样才能修好它

//$id = $this->input->post('id');
$id = '65';
    $this->db->query("
        DELETE table_1, table_2, table_3, table_4, table_5
        FROM table_1
            JOIN  table_2   ON table_1.id = table_2.rela
            JOIN  table_3   ON table_2.h_id = table_3.h_id          
            JOIN  table_4   ON table_1.id = table_4.rela
            JOIN  table_5   ON table_2.h_id = table_5.h_id
        WHERE table_1.id =".floor($id));
更新:

表_1.id=>这有id
65

表2.rela=>这有rela
65

表2.h\u id=>这有h\u id
11

表3.h\u id=>这有h\u id
11

表4.rela=>这有rela
65

表5.h\u id=>这有h\u id
11

更新2:

table_1.id
中,一行包含
65
,也用于
table_2
table_4
中包含
rela 65
table_1.id=table_2.rela=>65,table_1.id=table_4.rela=>65
)现在在
table_2
中,我们有一个列名h_id,其编号为
11
,在其他表[
table_3
table_5
]中,它被设置为
h_id

该关系如何从
表1
中获取
id
,并删除其表中的其他行

主要是这样的:(使用
表1
中的have one
id
,我们可以删除表中与其相关的其他行,下面是该关系的一个示例)

表1.id
=
65
=>
表4.rela
=
65
=>
表2.rela
=
65
->
表2.h\u id
=
11
=>
表3.h\u id
=
11
=
表5.h\u id
=
11

更新3:


谁能帮我解决问题,有个人吗?我无法得到问题的静态答案。

您必须逐个删除表中的行

也可以为级联删除定义表。。。如果执行此操作,则只需删除一个表中的一行。其他表中的其他相关行将自动删除

        CREATE TABLE `tableName` (
        `id` int(10) unsigned NOT NULL auto_increment,
        `typeId` int(10) unsigned NOT NULL,
        PRIMARY KEY (`id`),
        KEY `type` (`typeId`)
        CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`)
          REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

希望这对您有所帮助

您说要删除表,但您的意思可能是要从表中删除行。删除或删除表意味着删除表及其所有内容

我看到一个问题。您在第一部分中提到了表1,但没有再次提及。我假设第一个表是表1,而不是tour

    DELETE table_1, table_2, table_3, table_4, table_5
    FROM table_1
        INNER JOIN  table_2   ON table_1.id = table_2.rela
        INNER JOIN  table_3   ON table_2.h_id = table_3.h_id          
        INNER JOIN  table_4   ON table_1.id = table_4.rela
        INNER JOIN  table_5   ON table_2.h_id = table_5.h_id
    WHERE table_1.id = 5
从mysql文档来看,如果要删除所有表中的行,也可以省略表列表:

    DELETE FROM table_1
        INNER JOIN  table_2   ON table_1.id = table_2.rela
        INNER JOIN  table_3   ON table_2.h_id = table_3.h_id          
        INNER JOIN  table_4   ON table_1.id = table_4.rela
        INNER JOIN  table_5   ON table_2.h_id = table_5.h_id
    WHERE table_1.id = 5

不知道你为什么要在应用层这样做。MySQL提供了使用外键约束(在delete级联上)删除子行的能力。检查当前架构并查看它们是否已可用:

mysql> show create table child_table;
如果存在可用的外键约束,则应看到如下内容:

CONSTRAINT `constraint_id` FOREIGN KEY (`some_id`) REFERENCES `some_table` (`id`) ON DELETE CASCADE
这意味着,如果从“some_table”中删除一行,“child_table”中引用与“some_table”相同id的任何行都将自动删除

更多信息

如果你需要在APP层做这件事,那么你应该真正考虑一个事务,我假设你在使用PDO,尽管它可能与MySQL相关。下面是一个潜在的解决方案,因此我不承担任何您可能招致的数据丢失的责任

$this->db->beginTransaction();

try {

   $this->db->execute('DELETE FROM table_1 WHERE id = 65');
   $this->db->execute('DELETE FROM table_2 WHERE rela = 65');
   $this->db->execute('DELETE FROM table_3 WHERE h_id = 11');
   $this->db->execute('DELETE FROM table_4 WHERE rela = 65');
   $this->db->execute('DELETE FROM table_5 WHERE h_id = 11');

   $this->db->commit();

} catch (Exception $e) {

    error_log($e->getMessage());

    $this->db->rollBack();

    $e = null; // PHP is notorious for not cleaning exceptions very well so force it
}

你到底想干什么?你总是从错误信息开始。错误信息是什么?谁能帮我解决问题,有个人吗?我还没有得到问题的答案。你可以同时从几个表中删除,如这里所述:@dknaack-我不明白你的sql,它是如何在五个表中删除的(表1、表2、表3、表4、表5)?搞错了,我想删除表中的行。怎么样?@dknaack:对不起,那不是给你的。未标记作者。在其他表中没有行id,其中一些是
h_id
,另一些是
rela
,它们在表行中的值不同。请在第一篇文章中查看我的更新。您是否检查过是否已经存在任何现有FK约束?我不理解您的意思“已经存在任何FK约束”?请出错,我要删除表中的行。怎么回事?FK=外键。FK约束告诉mysql一个表中的列与另一个表中的列相关。这允许您维护引用完整性并实现级联删除。你应该仔细阅读这个主题。不,犯一个错误,我想删除表中的行。怎么样?按照文档建议尝试使用内部连接。我修改了我的答案。请阅读我在第一篇文章中的更新2,并告诉我我的问题,我该怎么做?它有以下错误:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第2行“表_1.id=table_2”附近使用的正确语法