在很多行上增加一个值

时间:2011-11-20 08:40:49

标签: php mysql

目前我有一个循环超过10M记录的脚本,它非常慢,它是这样的: 我首先得到一个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_rank每次增加一个。任何人都可以提出更好的方法。

注意:虽然我通常不会将这种值存储在数据库中,但此时我确实需要在项目中进行比较搜索查询。

任何帮助都将受到赞赏:)

2 个答案:

答案 0 :(得分:1)

很抱歉也许我不知道你要做什么,但如果你这样做,你可以在纯sql中增加一个值:

 UPDATE packages_sorted SET price_rank = (price_rank + 1 ) WHERE ...

答案 1 :(得分:1)

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 ];