2011-12-23 175 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