我想从一个MySQL数据库中检索8000条记录,执行一个计算,给每条记录打分,然后用打分更新数据库。
以下是我所拥有的:

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

是这样做的吗?在我看来,通过这种方式进行8000次更新,我可以让我的服务器冒烟,但我不知道有什么更优雅的解决方案。任何见解都值得赞赏。
注意:我知道mysql_u*函数已被弃用。在这个有问题的网站上,我不得不和他们住上一段时间。

最佳答案

你看这个怎么样?

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

这意味着:“对于当前live的每个状态,将列rating设置为viewslikestagcountdcount和一个php变量的总和”。差不多是你的php代码的翻译。
这就不需要任何选择和循环。让数据库为你做这项工作。
既然你使用的是mysql_*,我甚至不会深入讨论安全性和那些东西。我就把这个留在这里作为参考:
How can I prevent SQL-injection in PHP?-&-Booby Tables
Why shouldn't I use mysql_* functions in PHP?
像那样使用do..while时要小心。因为它只在至少运行一次之后进行检查,所以如果没有结果,您可能会得到一些notice/warning

关于php - MySQL在PHP while循环内更​​新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38112401/

10-11 12:43
查看更多