Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t为排行榜数据库设计提供体面的解决方案_Php_Mysql_Sql - Fatal编程技术网

Php Can';t为排行榜数据库设计提供体面的解决方案

Php Can';t为排行榜数据库设计提供体面的解决方案,php,mysql,sql,Php,Mysql,Sql,我很难为我的数据库想出一个好的设计,我尝试了两个不同的例子,但没有一个像我希望的那样成功 这就是我的情况: 情景: 排行榜由多个服务器组成,一个服务器有一个名称,一个 登录地址和说明。玩家有名字和唯一ID。 玩家的不同动作与日期一起被记录下来 执行此操作时,这些是玩家可以执行的操作 执行: 他能杀人 他可能会被杀(死亡) 他的比赛时间在比赛结束时被记录下来 他能赢一场比赛 每个动作的日期都应该被记录下来,这样我就可以得到他的列表 过去一周、过去一个月、过去一年和总体的统计数据 我尝试的另一

我很难为我的数据库想出一个好的设计,我尝试了两个不同的例子,但没有一个像我希望的那样成功

这就是我的情况:

情景:

排行榜由多个服务器组成,一个服务器有一个名称,一个 登录地址和说明。玩家有名字和唯一ID。 玩家的不同动作与日期一起被记录下来 执行此操作时,这些是玩家可以执行的操作 执行:

  • 他能杀人
  • 他可能会被杀(死亡)
  • 他的比赛时间在比赛结束时被记录下来
  • 他能赢一场比赛
每个动作的日期都应该被记录下来,这样我就可以得到他的列表 过去一周、过去一个月、过去一年和总体的统计数据

我尝试的另一个解决方案是为每个表分别设置一个kill,例如 表2 表11死亡人数 乒乓球冠军 桌上游戏 球员

然而,我最终会得到很多表,我不知道在代码中实现这些表是否容易

更新: 添加最终结果(解决方案)

您可以拥有这些表格(假设您有一张玩家表格):

然后,通过这些模式,您可以很容易地找到每场游戏中每个用户的杀戮次数、谁赢得了游戏、游戏持续了多长时间等等

当然,这些都是非常简化的。您可能需要更多的表和这些表中的更多行

更新 如果你有一张死亡表,你就不需要死亡表,因为你可以记录谁杀了谁,谁杀了谁

SELECT p.Name, COUNT(k.id) as DEATHS
FROM Players p
JOIN Kills k on k.killed_player_id = p.id
WHERE p.id = 3
GROUP ON k.id

根据您的描述,我建议使用以下表格:

Servers (id,servername)
Players (id,playername,description,etc)
Actions (id, actionid, actionname, details)
PlayerActions (serverid,playerid,actionid,timestamp)
PlayerGameTime (id, serverid, playerid, timeplayed, timestamp) 

你是在要求别人为你设计数据库吗?我担心这可能会被认为是堆栈溢出的主题之外。统计与类型的关系是错误的。图中有1个统计信息,可以有许多类型,而这显然是它所不能的。正确的设计是合理的。你的设计在我看来还行(西蒙的观点除外)。你使用它的问题是什么?你也可以考虑当你完成它时,你需要从你的数据库中得到什么信息,然后从中恢复过来。你需要知道一个玩家被杀了多少次吗?还是你需要知道谁杀了谁?是记录每场比赛的比赛时间,还是一名球员所有比赛的总时间?你需要知道一个玩家没有赢多少场比赛吗?试着按照你的图表创建表格,然后添加演示数据。我想你会发现它完美地记录了你想要的。谢谢你的建议,我确实喜欢它,但是我认为Digital chris的那一款最适合我。但是,我也是Digital chris!:)@克里斯拉瓦,嘿,嘿。只能有一个,克里斯,显然不是!尽管我认为我们可以在这个网站上学会和平共处,只要我们小心不要再踩到对方的脚。:)我做了一些调整,我在桌面游戏动作中添加了一个field playergame_id,并删除了PlayerActions中的服务器id,这样它还可以让我获得一个玩家在特定游戏中执行的动作列表:)@MaximGeerink,看起来可以正常工作,只要你不关心某个游戏发生在哪个服务器上(即,只有一个服务器池,而您没有每个服务器的排名)
Servers (id,servername)
Players (id,playername,description,etc)
Actions (id, actionid, actionname, details)
PlayerActions (serverid,playerid,actionid,timestamp)
PlayerGameTime (id, serverid, playerid, timeplayed, timestamp)