2011-12-23 140 views
1

我有这个查询,工作正常。它根据当前时间删除旧的记录。删除多个表中的多行MYSQL

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

$result = mysql_query($cleanacc_1); 

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

回答

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的建议是一个更好的方法,发布有关数据库的更多信息,我会更详细的工作的例子解释。

+0

我同意先生,我应该重新设计。但是,我正在学习MySQL,所以请放轻松一点:-) 除了表名之外,我对不同的帐户有不同的表格;结构是相同的,即 ID,帐户,计划,消息 我也做了多选择语句,它在处理器上收费。 你会如何推荐我继续? 谢谢 – MaxBux 2012-02-07 14:14:23

+0

我设法使用一个表,它的高效以及更容易管理。谢谢 – MaxBux 2012-02-16 06:40:07

0

无法做到这一点,AFAIK;反正,我不认为它会运行100个查询一个很大的问题,假设你没有运行为每个请求左右..

你期待的性能问题?如果是这样的话,我可能会使用一个cron作业运行每X分钟即查询..

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)。我得到了预期的产出。

因此,请以您的情况尝试相同的方式。

+0

这可以工作,但我不得不改变为单个表来缓解处理器负载。 – MaxBux 2012-02-16 06:39:10