我有一个多人游戏网站,用户每隔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个游戏,它会使用大量的资源,因为mysql_query在while循环中。
每个游戏都存储在3行的2分贝表中。
一个游戏表行,它保存游戏数据和两个游戏玩家表行,一个是当前的玩家,另一个是对手。
这是为对手排的,我不得不对其进行第二次查询。
是否可以将这一行加入到第一个查询中,以便我每20秒只运行一个查询?
表模式如下:
表游戏 game_id - int(11)受邀时间-时间戳最后绘制-时间戳时间戳绘制- datetime bag_tiles - text table_tiles - int(11)随机- int(11)活动- int(11)完成- int(11)删除- int(11) warn1 - int(11) warn2 - int(11)
Table id - int(11) player_tiles - text player_draws - int(11) first_draw - int(11) player_turn - int(11) int(11) last_draw_type - int(11) player_passes - int(11)交换- int(11) player_win - int(11) player_points - int(11) infoPop - int(11)
表用户 id - int(11)电子邮件- varchar(255)用户名- varchar(255)密码- varchar(50) profileimg - varchar(25) country - int(11)注册日期-日期-时间戳
希望这是有意义的,并希望得到帮助:
发布于 2012-11-11 16:59:34
您可以尝试以下方法:
$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");https://stackoverflow.com/questions/13333231
复制相似问题