首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个mysql查询合并为一个?

将两个mysql查询合并为一个?
EN

Stack Overflow用户
提问于 2012-11-11 16:47:17
回答 1查看 98关注 0票数 1

我有一个多人游戏网站,用户每隔20秒就会收到这样的游戏列表:

代码语言:javascript
复制
$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)注册日期-日期-时间戳

希望这是有意义的,并希望得到帮助:

EN

回答 1

Stack Overflow用户

发布于 2012-11-11 16:59:34

您可以尝试以下方法:

代码语言:javascript
复制
 $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");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13333231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档