gpt4 book ai didi

php - 需要有关 php 和 mysql 中查询嵌套循环的帮助吗?

转载 作者:行者123 更新时间:2023-11-29 06:22:03 24 4
gpt4 key购买 nike

我正在尝试这样做:

<?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

...将来会有更多日志表。

我想找到他们在我的网站上花费的“平均时间”,该时间存储在每个日志表中。

所以你们说,每周存储日志是一个坏主意?我应该合并到一张表中吗?

最佳答案

听起来您的模型有问题。为什么您有 20 个 data 表,而不是一个带有 week 列的表?

然后你可以做

Select user, Sum( money_spent ) As total_money_spent
From data
Group By user

甚至

Select Count(*) As good_customer_count
From data
Group By user
Having Sum( money_spent ) > 1000000

根据您当前的结构,您只能执行以下操作:

Select u.user, d1.money_spent + d2.money_spent + ...
From users u
Join data1 d1 On ( d1.user = u.user )
Join data2 d2 On ( d2.user = u.user )
...

Select Count(*) As good_customer_count
From
( Select d1.money_spent + d2.money_spent + ... As total_money_spent
From data1 d1
Join data1 d1 On ( d1.user = u.user )
Join data2 d2 On ( d2.user = u.user )
...
)
Where total_money_spent > 1000000

这肯定会比您当前的解决方案更快。


并且在页面上花费的时间应该存储在数字字段中。

关于php - 需要有关 php 和 mysql 中查询嵌套循环的帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com