[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が多いので少し不安になったの
ですが、大丈夫でしょうか?