Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在许多行上按1递增值_Php_Mysql - Fatal编程技术网

Php 在许多行上按1递增值

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)

目前我有一个脚本可以循环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'=>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
语句。它当然可以工作,而且现在快多了。谢谢:)这是一个很好的提示,我会一次又一次地使用它!