Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 2个表删除了什么?_Php_Mysql - Fatal编程技术网

Php 2个表删除了什么?

Php 2个表删除了什么?,php,mysql,Php,Mysql,我在mysql中有两个表 当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐 然后我从表1中删除了许多符合特定条件的行,但没有从表2中删除任何行。现在我想从表2中删除我从表1中删除的所有行 所以基本上,我想从表2中删除表1中id不存在的所有行…并保留表1和表2中id列存在的行 我怎样才能做到尽可能干净和简单 我可以使用php或mysql/phpmyadmin…如果这两个表相关,那么最好使用级联删除 否则 Delete FROM table2 WHERE ID no

我在mysql中有两个表

当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐

然后我从表1中删除了许多符合特定条件的行,但没有从表2中删除任何行。现在我想从表2中删除我从表1中删除的所有行

所以基本上,我想从表2中删除表1中id不存在的所有行…并保留表1和表2中id列存在的行

我怎样才能做到尽可能干净和简单


我可以使用php或mysql/phpmyadmin…

如果这两个表相关,那么最好使用级联删除

否则

Delete
FROM table2
WHERE ID not in (select t1.ID from table1 t1);

您可以使用联接进行删除,但首先要进行备份

 DELETE table2 FROM table2 LEFT JOIN table1 
 ON table2.id=table1.id 
 WHERE table1.id IS NULL;

以下是最紧凑的解决方案:

delete table2 from table2 left join table1
              using (id)
              where table1.id is null

编辑:不仅仅是紧凑。紧凑高效。子查询解决方案将像饥饿的老虎一样消耗您的CPU时间。

要同时从两个表中删除记录,请执行以下操作:

DELETE `table1`, `table2`
FROM `table1`
LEFT OUTER JOIN `table2` ON `table1`.`id` = `table2`.`id`
WHERE @condition
这样,您就不需要向数据库发送每个表的查询

当某些东西被插入表1时,它也被插入表2中。这样,两个表的id列中的自动增量总是对齐

请不要那样做。自动增量不是用来保持值同步的东西。您应该执行以下操作:

在表1中插入数据,自动递增; 获取最后插入行的Id; 在表2中插入数据,不自动递增,id=table1.id 我强烈建议你尽快重构,否则你将来会有成千上万的类似问题

将此作为答案发布,因为具有相同OP问题的任何人都可能是相同架构错误的受害者。

在table2.id=table1.id上,也可以使用id编写。
$result = mysql_query(SELECT ID FROM table2 WHERE table2.ID NOT IN ( SELECT table1.ID FROM table1 WHERE table2.ID=table1.ID ));
$rows = mysql_num_rows($result);
$i = 0;
while($i < $rows){
    $cleanup = mysql_query(DELETE from table2 WHERE ID='$result[$i] ));
}