我想獲得這樣做:需要幫助在php和mysql中的查詢嵌套循環?
<?php
$good_customer = 0;
$q = mysql_query("SELECT user FROM users WHERE activated = '1'"); // this gives me about 40k users
while($r = mysql_fetch_assoc($q)){
$money_spent = 0;
$user = $r['user'];
// Do queries on another 20 tables
for($i = 1; $i<=20 ; $i++){
$tbl_name = 'data' . $i;
$q2 = mysql_query("SELECT money_spent FROM $tbl_name WHERE user = '{$user}'");
while($r2 = mysql_fetch_assoc($q2)){
$money_spend += $r2['money_spent'];
}
if($money_spend > 1000000){
$good_customer += 1;
}
}
}
這僅僅是一個例子。我在本地主機上測試,對於單個用戶,它返回非常快。但是,當我嘗試1000,它需要永遠,甚至沒有提到4萬用戶。
無論如何優化/改善此代碼?
編輯: 順便說一句,每個其餘20桌都有約20 - 40K記錄
EDIT2:
好吧,去掉 「錢花」 的想法。這是我的當前結構:
用戶表=>用戶是PK
logs_week_1表=>用戶是FK。
logs_week_2表=>用戶FK
logs_week_3表=>用戶FK
...將在未來更多的日誌表。
我想找到他們花在我的網站上的「平均時間」,這些時間存儲在每個日誌表中。
所以你們說,每週存儲日誌是一個壞主意?我應該合併成一張表?
你爲什麼要對20個不同的表格進行查詢?你的問題似乎在你的數據庫設計中。發佈你的表結構的樣子。 – Galen 2010-04-21 05:33:25
哦..那些20 +++表格是每週存儲的日誌表格 – mysqllearner 2010-04-21 05:38:00
BIG RED ALARM BUTTON。數據庫設計錯誤。但並不罕見。搜索「SQL Pessimization」和「SQL Antipattern」。如果您需要超過一週的數據,則不需要每週的表格。如果數據太多,則需要OLAP數據庫。 – dkretz 2010-04-21 05:42:15