从多个表MYSQL中删除多行

时间:2011-12-23 16:22:23

标签: mysql sql-delete

我有这个查询工作正常。它根据当前时间删除旧记录。

$cleanacc_1 = "DELETE FROM $acc_1 
    WHERE `Scheduled` < DATE_SUB(UTC_TIMESTAMP(), INTERVAL 30 SECOND)";

$result = mysql_query($cleanacc_1);

但是,有超过100个表(帐户)需要删除,我想知道我是否可以将它们组合成一个查询。如果可能的话怎么办?

4 个答案:

答案 0 :(得分:0)

无法做到这一点,AFAIK;无论如何,我认为运行100个查询并不是一个大问题,假设你没有为每个请求运行那个...

您是否期待性能问题?如果是这种情况,我可能会使用cron作业每隔X分钟运行一次查询..

答案 1 :(得分:0)

您可以设置表的视图,然后对视图运行delete sql。那也应该删除基础表数据。您的表架构和权限可能会影响这是否有效。看看这个答案,它也可能会有所帮助。

Does deleting row from view delete row from base table - MYsql?

答案 2 :(得分:0)

这意味着您为每个帐户创建一个新表。为什么不在单个表中为每个帐户创建记录?

例如......

create table account (id int unsigned primary key auto_increment, other fields...);

如果您更改了表格结构,则可以使用单个查询删除单个帐户记录...

delete from account where condition=true;

然后将每个帐户的个人交易记录存储在另一个表中,并包含与...相关的帐户ID。

create table transaction (id, account_id, other transaction fields);

如果不更改数据库设计,则需要编写循环遍历每个表的PHP代码并运行删除查询。这是非常低效的,我建议你按照建议重新设计表格。

如果您不明白为什么我的表格redsign建议是一种更好的方法,请发布有关您的数据库的更多信息,我将通过一个工作示例更详细地解释。

答案 3 :(得分:0)

请考虑以下示例。

我在以下结构中有三个表。

表名:t1,t2,t3

字段:Id,名称

我将使用一个条件执行删除查询,该条件的重新编码id必须小于10.

DELETE FROM t1, t2,t3 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id<10 and t2.id<10 and t3.id<10.

查询已成功执行(MySql)。我得到了预期的输出。

所以请以同样的方式尝试你的病情。