我正在努力做到这一点:
<?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 时,它需要很长时间,甚至没有提到 40k 用户。
无论如何优化/改进这段代码?
编辑:顺便说一下,其他 20 个表中的每一个都有约 20 - 40k 条记录
编辑2:
好吧,放弃“花钱”的想法。这是我目前的结构:
用户表 => 用户是 PK
logs_week_1 表 => 用户是 FK。
logs_week_2 表 => 用户是 FK
logs_week_3 表 => 用户是 FK
...将来会有更多的日志表。
我想找到他们在我的网站上花费的“平均时间”,这些时间存储在每个日志表中。
所以你们是说,每周存储日志是个坏主意?我应该合并到一张桌子吗?