MySQLデータベースから8,000レコードを取得し、各レコードにレーティングを与え、レーティングでデータベースを更新する計算を実行します。ここでPHP内部でのMySQLの更新whileループ
は、私が持っているものです。
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 WHERE status = 'live'' – FirstOne
必要に応じて制限節を含めることもできます。しばしば、別の列をbProcessed = 1に設定した「someDate desc limit 1000による順序付け」を行います。したがってwhere句にはbProcessed = 0部分が含まれます。 – Drew
@FirstOne:ありがとうございます。私はおそらく、評価の計算にはデータベースからではないデータが含まれることに言及すべきであろう。見落として申し訳ありません。変数$ v5を含めるように質問を更新しました。 – blogo