php - 构建在线 php 游戏数据库。如何在 mySQL 数据库中查找 2 人之间的游戏

标签 php mysql database database-design

我正在使用 PHP 编写一个游戏。就我的问题而言,我们可以将我的游戏与 iPhone 上的“Words with Friends”进行比较,对于那些不熟悉该游戏的人来说,它是一款在线/移动拼字游戏。游戏由 3 个主要步骤组成:

  • 第 2 位用户决定开始游戏。
  • 第二,在数据库表“DATA”中创建一个新行,其中 保存两个用户的游戏数据。
  • 第三,最后,两人被转移到他们玩的新页面 游戏。当游戏结束时,“DATA”表中的行是 删除的胜利/失败将被保存并反射(reflect)在“用户”表中。 与 Words with Friends 一样,用户可以随时拥有多个“开放游戏” 片刻。这意味着他们不必在另一场比赛之前完成一场比赛 开始了。

背景:在 MySQL 数据库中,我将至少有两个表,一个用于标记为“USER”的通用玩家数据,另一个用于保存当前正在进行的游戏的统计数据,称为“DATA”。每个用户在创建帐户时都会获得一个唯一的 9 位 ID 主键。

我需要一些关于用于完成此类任务的最佳实践的建议。我有一些想法,在我看来相当原始,它们会起作用,但我想使用更专业的东西。

我的想法之一是采用两个用户 ID 中较小的数字并将其连接到较大的 ID 的开头并将其保存在数据库中。一个例子。我们有 2 个用户:adam 和 alan。它们的 ID 分别为 123456789223456789。两者开始一个游戏,在 DATA 表中创建一个新行,其中 GAMEID 等于 123456789223456789 。他们玩到一半就退出。第二天,他们尝试开始新游戏。数据库检查哪个用户的 ID 较小,并将它们连接在一起以检查游戏记录是否已存在。它注意到 123456789223456789 游戏已经开始,而不是创建一个全新的游戏,而是将他们带回到已经进行中的游戏。

我觉得这肯定是过度杀戮,应该有一个更简单的方法来解决这个问题。请我欣赏并提出建议或提示。

最佳答案

一个简单的 user_games 表就足够了,您可以将游戏与用户关联起来。您甚至可以添加事件标志或上次事件日期时间。

CREATE TABLE user_games (
  user_id INT NOT NULL,
  game_id INT NOT NULL,
  UNIQUE KEY index_user_games_on_user_game (user_id, game_id),
  KEY index_user_games_on_game (game_id)
);

不要通过构建无法正确索引的键来使事情变得过于复杂。索引可以防止表变得一团糟。可以通过 user_id 查询此表以查找其游戏列表,通过 game_id 查询此表以查找游戏中的用户,或通过两者查询来查明用户是否存在于游戏中游戏。

关于php - 构建在线 php 游戏数据库。如何在 mySQL 数据库中查找 2 人之间的游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12048733/

相关文章:

php - 如何在我的 View 页面中使用打印输出扩展来打印 View 页面?

javascript - 每次更改数据库下拉值时,文本框填充空值

php - 将值添加到数据透视表 Laravel

php - MySQL查询以获取最后N次失败的付款

android - Android 上的 HttpPost 崩溃应用程序

mysql - 将我的 SQL 减少了 40%,但运行速度却慢了 60 倍?

database - 事务日志数据大小

database - 需要数据库结构的帮助

php - 在 Laravel 中将 Eloquent 集合与查询合并?

mysql - 由于在 MySQL 中使用保留字作为表名或列名而导致的语法错误