0

複数の部屋を同時に実行できるゲームを作成しています。すべての部屋に関する情報を保持するための MySQL テーブル「部屋」があります。

このテーブルのフィールドには、ルームの数値 ID である「id」と、ルーム内のユーザーの数値 ID である「user1」から「user6」が含まれます。

1 つのページで、すべての部屋についてこれらの情報を使用して何かを行う必要があります。現在のコードは次のようなものです。

//query() is just a function which implements mysqli::query with logging,
//  error handling, etc. It uses the same connection on each call so
//  there is no overhead of opening a new connection.
$q = query("SELECT id,some_other_fields,user1,user2,user3,...,user6 FROM rooms");
while($r = $q->fetch_assoc()){
    //some stuff here

    foreach(array($r['user1'],$r['user2'],...,$r['user6']) as $user)
        stuff((int)$user);

    //some more stuff
}

ご覧のとおり、明示的にユーザーの配列を作成し、それをループ処理する必要があります。
それを行うより良い方法はありますか?

そして、私はこのコードを検討しています:

$q = query("SELECT id,some_other_fields FROM rooms");
while($r = $q->fetch_assoc()){
    //some stuff here

    foreach(query("SELECT user1,user2,user3,...,user6 FROM rooms WHERE id=".$r['id'])->fetch_assoc() as $user)
        stuff((int)$user);

    //some more stuff
}

部屋数が通常10~20室程度だとしたら、これでいいでしょうか?

4

1 に答える 1

1

このように、クエリを実行する前にフィールドの配列を作成します

$fields = array('user1','user2','user3','user4');

$q = query("SELECT id,some_other_fields, ". implode($fields, ',') ." FROM rooms");
while($r = $q->fetch_assoc()){
    //some stuff here

    foreach($fields as $field)
        stuff((int)$r[$field]);

    //some more stuff
}

次に、1 行のコードを変更するだけで、クエリとループを変更できます。

于 2013-02-17T03:53:08.500 に答える