簡體   English   中英

MySQL在PHP while循環內更​​新

[英]MySQL update inside PHP 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_ *函數。 在有問題的網站上,我必須與他們住在一起一段時間。

如何獲得洞察力?

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

這意味着:“對於當前處於live狀態的每個狀態,使列ratingviewslikestagcountdcount 一個php變量的總和”。 幾乎是您的php代碼的翻譯

這樣就無需進行任何選擇和循環。 讓數據庫為您完成工作。


由於您使用的是mysql_* ,因此我什至不深入了解安全性和相關內容。 我將把它留在這里作為參考:


並在使用do..while時要小心。 由於它僅在運行至少一次后才檢查,因此如果沒有結果,您可能會得到一些notice / warning

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM