[英]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
狀態的每個狀態,使列rating
為views
, likes
, tagcount
和dcount
和一個php變量的總和”。 幾乎是您的php代碼的翻譯 。
這樣就無需進行任何選擇和循環。 讓數據庫為您完成工作。
由於您使用的是mysql_*
,因此我什至不深入了解安全性和相關內容。 我將把它留在這里作為參考:
do..while
時要小心。
由於它僅在運行至少一次后才檢查,因此如果沒有結果,您可能會得到一些notice
/ warning
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.