我有一个脚本需要每晚更新一个值。
我的 mysql 数据库有 119k 行,被分组为 35k 行。
对于这些行中的每一行,我需要计算最高值和最低值,并使用这些行之间的新百分比差异更新行。
现在我什至无法执行限制为 50+ 的更新
我的代码:
$query_updates = mysqli_query($con,"SELECT partner FROM trolls WHERE GROUP BY partner LIMIT 0, 50")
or die(mysqli_error($con));
while($item = mysqli_fetch_assoc($query_updates)) {
$query_updates_prices = mysqli_query($con,"SELECT
MIN(partner1) AS p1,
MAX(partner2) AS p2,
COUNT(partner3) AS p3
FROM trolls WHERE partner='". $item["partner"] ."'")
or die(mysqli_error($con));
$partner = mysqli_fetch_assoc($query_updates_prices);
$partner1 = $partner["p1"];
$partner2 = $partner["p2"];
$difference = $partner1 - $partner2;
$savings = round($difference / $partner1 * 100);
$partner3 = $prices["p3"];
$update_tyre = mysqli_query($con, "UPDATE trolls SET
partner1='". $partner1 ."',
partner2='". $partner2 ."',
partner3='". $partner3 ."',
partner4='". $savings ."'
WHERE partner='". $item["partner"] ."'")
or die(mysqli_error($con));
echo '<strong>Updated: '. $item["partner"] .'</strong><br>';
}
我怎样才能使它更简单/更容易执行?
最佳答案
+1 用于 cron,命令行运行也可以帮助您解决问题,因为它不会超时。但是,您可能会遇到通过锁定表进行分组的问题。 老实说(你不会喜欢这样)但是如果你在一个有大量字段的字段上进行分组,那么我会说你做错了什么。 因此,我会考虑重新制作表格,为“合作伙伴”准备一张表格,然后引用会有所帮助的巨魔。
但是为了给你一个解决方案来加快这个速度,让你转向更好的数据库/表设置并消除锁定问题。我会这样做。
第一步。 创建一个名为
的表Partners
Field1: partner_id
Field2: partner
Field3: p1
Field4: p2
Field5: p3
第 2 步: 运行查询 SELECT partner FROM trolls(将来可能会更改为 SELECT * FROM partners)
第 3 步: 检查他们是否在合作伙伴中 - 如果不插入
第 4 步: 运行你的
SELECT
MIN(partner1) AS p1,
MAX(partner2) AS p2,
COUNT(partner3) AS p3
FROM trolls WHERE partner='". $item["partner"] ."'
第 5 步: 将此值更新到 Partners 表中,并(暂时)更新 trolls 表。
完成。
哦,如果它还不存在,请在合作伙伴字段中添加一个索引。
关于php - 用 php 更新数以千计的 mysql 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857411/