PHP内部的MySQL更新循环

时间:2016-06-30 01:07:42

标签: php mysql while-loop

我想从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_ *函数。在有问题的网站上,我必须与他们共处一段时间。

1 个答案:

答案 0 :(得分:6)

这有什么见解?

UPDATE
    tblposts
SET
    rating = views + likes + tagcount + dcount + $value
WHERE
    status = 'live';

这意味着:“对于目前live的每个状态,请将列rating设为viewslikestagcount和{的总和{1}} 一个php变量“。几乎是你的PHP代码的翻译

这消除了对任何选择和循环的需要。让DB为你工作。

由于你使用的是dcount,我甚至都没有深入了解安全性和那些东西。我将把这个留在这里作为参考:

<小时/> 使用mysql_*时要小心。由于它仅在运行至少一次后才进行检查,因此如果没有结果,您可能会获得一些do..while / notice