我正在做一个基于回合的游戏,并试图构建一个匹配功能,当玩家选择与一个随机的对手一起玩时。我是MySQL的菜鸟,所以我需要一些帮助。

我正在考虑这样做:


当玩家选择与随机对手对抗时,请查看“ waiting_list”表以查看是否有对手。
如果没有对手,则将玩家添加到等待名单中。
如果在等待名单上有一个对手,从名单上删除该玩家,然后与其他玩家开始游戏。


我担心的是,如果我这样做,那么候补名单上的同一位选手是否有可能会被几位选手选中。想象一下,如果有100,000名玩家选择了自动匹配功能,那么数据库(phpmyadmin)是否可以正常处理?您将如何构建逻辑?

谢谢

最佳答案

为了帮助防止单个玩家进入多个游戏,您可以为“ GameIDAssigned”添加一列等待列表(如果尚未添加),默认为0(甚至是PlayAgainstPerson)。

在查询可用于并显示给许多玩家的数据时,记录可能都具有相似的时间戳,但是您只需要1。因此,以某种随机方法选择一个,然后在等于时间戳且没有游戏的情况下分配ID已分配。如果返回1条记录已更新,则为您的记录。如果已将其分配给其他人,则将填写GameIDAssigned,从而防止您再次进行分配。如...

PersonIDFromWaitingList = SomeValueEvenIfBySQLSubSelect

Update YourWaitingListTable
   set GameIDAssigned = SomeCurrentGameIDSequence
   where DateTimeStampColumn = ValueWhenOriginallyQueried
     AND GameIDAssigned = 0


在没有看到游戏结构或表格列的任何其他元素的情况下,我目前无法提供更多功能,但是希望您能充分理解。如果试图同时由多个人分配一个候补名单人,则只有第一个完成更新(而gameIDAssigned仍为0)的人获胜,而其他尝试获取该人的人将错过并需要尝试下一个可用...

关于php - 您将如何构造此php-mysql查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9666663/

10-09 00:07