1

ユーザーが 20 秒ごとに次のようなゲームのリストを取得するマルチプレイヤー ゲーム サイトがあります。

$sql1 = mysql_query("SELECT gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp
                        INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id
                    WHERE gp.fk_player_id = $currplayer AND g.invite=0 AND g.deleteby != $currplayer ORDER BY g.lastdraw ASC");  

while($row1 = mysql_fetch_assoc($sql1)){

    $gameid = $row1['fk_game_id'];

    // GET CURRENT GAME OPPONENT ID AND BOARD DATA //
    $sql = mysql_query("SELECT gp.fk_player_id
                              ,gp.last_draw_type
                              ,gp.player_turn
                              ,u.country
                              ,u.username
                              ,u.profileimg
                        FROM ".$prefix."_gameplayer gp
                            INNER JOIN ".$prefix."_users u
                                ON gp.fk_player_id = u.id
                         WHERE gp.fk_player_id!=$currplayer AND gp.fk_game_id=$gameid");
    $row = mysql_fetch_assoc($sql);

プレーヤーが 30 のゲームを持っている場合、while ループ内の mysql_query のために多くのリソースを使用します。

すべてのゲームは、3 行の 2 つの db テーブルに格納されます。

ゲーム データと 2 つのゲームプレイヤー テーブル行を保持するゲーム テーブル行。1 つは現在のプレイヤー用で、もう 1 つは対戦相手用です。

2 番目のクエリを実行する必要がある対戦相手の行です。

この行を最初のクエリに結合して、プレーヤーに対して 20 秒ごとに 1 つのクエリのみを実行することはできますか?

テーブル スキーマは次のとおりです。

テーブル ゲーム game_id - int(11) 招待時間 - タイムスタンプ lastdraw - タイムスタンプ timetodraw - 日付時刻deleteby - int(11) warn1 - int(11) warn2 - int(11)

テーブル ゲーム プレイヤー ID - int(11) fk_game_id - int(11) fk_player_id - int(11) player_tiles - テキスト player_draws - int(11) first_draw - int(11) player_turn - int(11) last_draw_type - int(11) player_passes - int (11) swapped - int(11) player_win - int(11) player_points - int(11) infoPop - int(11) chatbadge - int(11)

テーブル ユーザー ID - int(11) 電子メール - varchar(255) ユーザー名 - varchar(255) パスワード - varchar(50) profileimg - varchar(25) 国 - int(11) 登録 - 日付 日付 - タイムスタンプ

これが理にかなっており、助けを期待していることを願っています:-)

4

1 に答える 1

1

次のことを試すことができます。

 $sql1 = mysql_query("SELECT gp.fk_player_id,gp.last_draw_type,gp.player_turn, u.country,u.username,u.profileimg,
                    gp.fk_game_id, gp.player_tiles, gp.infoPop, gp.chatbadge, g.lastdraw FROM ".$prefix."_gameplayer gp
                    INNER JOIN ".$prefix."_games g ON gp.fk_game_id = g.game_id 
                    INNER JOIN ".$prefix."_users u ON gp.fk_player_id = u.id
                    WHERE g.invite=0 AND g.deleteby != $currplayer 
                    AND gp.fk_game_id=$gameid ORDER BY g.lastdraw ASC");
于 2012-11-11T16:59:34.530 に答える