目前我有一个循环超过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
每次增加一个。任何人都可以提出更好的方法。
注意:虽然我通常不会将这种值存储在数据库中,但此时我确实需要在项目中进行比较搜索查询。
任何帮助都将受到赞赏:)
答案 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 ];