Php 在许多行上按1递增值
目前我有一个脚本可以循环10万条记录,速度非常慢,如下所示: 我首先在一个类似于以下内容的数组中获得1000个结果块:Php 在许多行上按1递增值,php,mysql,Php,Mysql,目前我有一个脚本可以循环10万条记录,速度非常慢,如下所示: 我首先在一个类似于以下内容的数组中获得1000个结果块: $matches[] = array('quality_rank'=>46732, 'db_id'=>5532); $matches[] = array('quality_rank'=>12324, 'db_id'=>1234); $matches[] = array('quality_rank'=>45235, 'db_id'=>8345)
$matches[] = array('quality_rank'=>46732, 'db_id'=>5532);
$matches[] = array('quality_rank'=>12324, 'db_id'=>1234);
$matches[] = array('quality_rank'=>45235, 'db_id'=>8345);
$matches[] = array('quality_rank'=>75543, 'db_id'=>2562);
然后我一个接一个地循环浏览并更新记录
$mult = count($matches)*2;
foreach($matches as $m)
{
$rank++;
$score = (($m[quality_rank] + $rank)/($mult))*100;
$s = "UPDATE `packages_sorted` SET
`price_rank` = '".$rank."',
`deal_score` = '".$score."'
WHERE `db_id` = '".$m[db_id]."' LIMIT 1";
}
这似乎是一种非常缓慢的方法,但我找不到另一种方法每次将字段
price\u rank
增加一个。有谁能提出更好的方法吗
注意:虽然我通常不会将这种值存储在数据库中,但我确实需要在项目的后面进行比较搜索查询
任何帮助都将不胜感激:)抱歉,也许我不知道您正在尝试做什么,但如果您执行以下操作,您可以在纯sql中增加一个值:
UPDATE packages_sorted SET price_rank = (price_rank + 1 ) WHERE ...
SQL紧随其后
SET @rank = 0;
SET @mult = [your code to get # of matches];
UPDATE `packages_sorted`
SET
`price_rank` = @rank:=@rank+1,
`deal_score` = (`quality_rank` + @rank) / (@mult) * 100
ORDER BY [ your code to get correct order of ranking here ];
“这似乎是一种非常缓慢的方式”。做什么?你问的不是很清楚。如果不清楚,很抱歉。这很慢,因为我需要单独更新每个记录(10000000条记录)。你想增加的是什么?是质量等级吗?
price\u rank
是我需要增加的字段,我对每条记录使用$rank++来实现这一点。Andy这是一个需要不断更新每行新值的数据库吗?你有没有办法选择更新哪些?啊,是的,我忘了提。从数据库中选择匹配项时,将根据另一个字段price
对匹配项数组进行排序。还有多个字段用于选择构成匹配的内容。最后,初始的price\u rank
与新的price\u rank
值没有关系,所以我不能增加它们。噢!看起来不错!我可以通过PHP运行SET
命令吗?非常感谢。出于某种原因,我认为通过一次发送一个查询,它会忘记SET
语句。它当然可以工作,而且现在快多了。谢谢:)这是一个很好的提示,我会一次又一次地使用它!