私はid、points、rankの3つのカラムを持つテーブルを持っています。タイムリーにすべてのフィールドのデータを更新して、ポイントが上下しますが、古いランキングは変わらないので、獲得したポイントに基づいてそれぞれのIDを取得する方法を見つけようとしています。PHPとMySQLiを使用して、多次元配列の値を別のマルチ配列と比較し、結果に応じてバルクデータを更新する方法は?
この表には2000以上の行があります。私はmysqliとphp5 +でそれをしたいですか?私は解決策があると思うが、1200秒のタイムアウト設定でもタイムアウトし、メモリが使い果たされる。
私のソリューションは正確に動作すると思いますが、ループのいずれかには医者が必要です。ここに私の目安は、獲得したポイントに対するランクを降順ために、すべてのポイントを取り、賞のIDその正確行くための「更新」クエリです:
<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php';
$a2= mysqli_query($link, "SELECT COUNT(*) as count FROM p1");
$b2 =mysqli_fetch_array($a2);
$count = $b2['count'];
$i=1;
while($i<=$count){
$a1= mysqli_query($link, "SELECT points FROM p1 ORDER BY points DESC LIMIT $i");
if(!$a1){
echo mysqli_error($link);
}
while($po = mysqli_fetch_array($a1)){
$ross[] = $po;
}
foreach($ross as $pot){
$points=$pot['points'];
}
$a5a= mysqli_query($link, "SELECT id FROM p1 WHERE points = '$points'");
while($popo = mysqli_fetch_array($a5a)){
$idi=$popo;
}
foreach($idi as $idm){
$id=$idm['id'];
$rank = $i;
$update = mysqli_query($link,"UPDATE p1 SET rank = '$rank' WHERE points = '$points' AND id ='$id'");
}
if(!$update){
echo "Error updating Rank".mysqli_error($link);
} else {
echo "Succuessul for where id = '$id' and points = '$points' set rank = '$rank'<br/>";
}
$i++;
}
?>
ようこそスタックオーバーフロー!コードのインデントを修正してください。 – valignatev
インデントを修正しました。私は推測する!今私はオタク助けて! – Unknown
と申し訳ございませんが、このようなコメントをお寄せいただくことはできません。 – Zmrzka