[PHP-users 4084] あるSQLテーブルの中でユニークなランクをつけられたユーザのランクを変更する場合の方法
S.Endoh
php-users@php.gr.jp
Mon, 3 Dec 2001 17:48:06 +0900
こんにちはphp+mysqlを勉強中のkzです
ユーザの情報を格納したテーブルがあり、各ユーザにはそれぞれランキングの番号が
付けられています。ランクの番号はユーザの登録の際に0から1づつ増やしながら割
当てていきます。つまり、新規ユーザを登録する際にはMAX関数を使用し、現在の最
大ランクに1を足したものを新しいユーザに割当てるので各ユーザにはそれぞれ固有
のランクが付けられていることになります。
この状況の中で、例えばあるユーザのランクを一つ上に上げるにはどのようにするの
が一番いいでしょうか?複数のユーザが同じランクの番号を持つことは許されませ
ん。
以下のような関数を考えたのですが、もっといい方法はあるでしょうか?
見やすいように一部を日本語にしてあります。
$useridはランクを変更したいユーザの固有ID
$newrank は上記ユーザの新ランク
function move($userid, $newrank){
$sql = "UPDATE テーブル SET ランク=ランク+1 WHERE ランク>=$newrank";
mysql_query($sql);
$sql = "UPDATE テーブル SET ランク=$newrank WHERE ユーザID=$userid";
mysql_query($sql);
$sql = "SELECT ユーザID FROM テーブル ORDER BY ランク,ユーザID ASC";
$i = 0;
while($row=mysql_fetch_array(mysql_query($result))){
$neworder[$i] = row['ユーザID'];
$i++;
}
foreach($neworder as $k=>$v) {
mysql_query("UPDATE テーブル SET ランク=$k WHERE ユーザID=$v");
}
}
このような感じでいいのでしょうか?なんだかupdateが多いので少し不安になったの
ですが、大丈夫でしょうか?