我想从MySQL数据库中检索8,000条记录,执行计算以给每条记录评分,然后用评级更新数据库。
以下是我所拥有的:
require_once('db-connect.php');
//---RETRIEVE FROM DB
mysql_select_db($database_lg, $lg);
$query_r1 = "SELECT * FROM tblposts WHERE status = 'live'";
$r1 = mysql_query($query_r1, $lg) or die(mysql_error());
$row_r1 = mysql_fetch_assoc($r1);
do {
$id = $row_r1['id'];
$v1 = $row_r1['views'];
$v2 = $row_r1['likes'];
$v3 = $row_r1['tagcount'];
$v4 = $row_r1['dcount'];
$v5 = $_POST['content_rating'];
$rating = $v1 + $v2 + $v3 + $v4 + $v5;
//---UPDATE DB
$updateSQL = "UPDATE tblposts SET rating='$rating' WHERE id = '$id'";
mysql_select_db($database_lg, $lg);
$Result = mysql_query($updateSQL, $lg) or die(mysql_error());
} while ($row_r1 = mysql_fetch_assoc($r1));
mysql_free_result($r1);
这是这样做的吗?在我看来,通过这种方式进行8,000次更新,我可以让我的服务器烟消云散,但我不知道更优雅的解决方案。任何洞察力都赞赏。
注意:我意识到不推荐使用mysql_ *函数。在有问题的网站上,我必须与他们共处一段时间。
答案 0 :(得分:6)
这有什么见解?
UPDATE
tblposts
SET
rating = views + likes + tagcount + dcount + $value
WHERE
status = 'live';
这意味着:“对于目前live
的每个状态,请将列rating
设为views
,likes
,tagcount
和{的总和{1}} 和一个php变量“。几乎是你的PHP代码的翻译。
这消除了对任何选择和循环的需要。让DB为你工作。
由于你使用的是dcount
,我甚至都没有深入了解安全性和那些东西。我将把这个留在这里作为参考:
<小时/> 使用
mysql_*
时要小心。由于它仅在运行至少一次后才进行检查,因此如果没有结果,您可能会获得一些do..while
/ notice
。