PHP / MySQL中的即时胜利程序 - 如何确保只选择一名获胜者?

时间:2011-04-30 05:44:57

标签: php mysql

我正在为比赛抽签建立一个即时胜利的行动。基本上在给定的一小时随机选择的分钟中,应该选择提交其详细信息的下一个用户作为获胜者。

我遇到的问题是,如果MySQL运行多个连接,那么如何阻止两个或三个获胜者被错误地绘制?我可以限制连接,还是让PHP等到所有当前的MySQL连接关闭?

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:0)

在进行更新时,使用WHERE子句中要更新的字段的起始值作为并发检查。这样,只有第一个要执行的将经历,因为之后它将不再匹配WHERE子句。您可以使用mysql_affected_rows()函数判断谁经历过,1函数会返回0表示成功更新,{{1}}表示其他任何人。

答案 2 :(得分:0)

在用户详细信息表中使用时间戳字段“registertime”。插入数据时,使用NOW()函数插入registertime字段。

当您选择随机分钟时,将其转换为unix时间。

获胜者是:SELECT * FROM userTable WHERE registertime> - 随机分钟的时间戳 - ORDER BY registertime LIMIT 1

答案 3 :(得分:0)

在一个记录上一次抽奖时间的地方保留一个小状态表。如果新记录的插入时间是在不同的时间,请检查他们是否是赢家。

如果是,则使用这个新的“赢家”抽奖时间更新状态表,并且这将阻止在其余时间内进行更多抽奖。但是,如果偶然的话,在任何特定时刻没有人真正“赢得”抽奖,会发生什么?你是保证最后一个人的胜利,还是根本没有胜利者?