Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
,一旦玩家完成,使用AJAX查找周围的10个分数。您已经有了此部件的SQL查询。您可以使用PHP在服务器端准备HTML,也可以发送原始数据,以便使用Javascript构建HTML。这可以在一个请求中完成(在PHP中使用json\u encode()返回数组/对象) 如果没有分数低于100分,那么它就不是100分中的一个,什么也不做_Php_Mysql_Sql_Database Design_Jquery - Fatal编程技术网

,一旦玩家完成,使用AJAX查找周围的10个分数。您已经有了此部件的SQL查询。您可以使用PHP在服务器端准备HTML,也可以发送原始数据,以便使用Javascript构建HTML。这可以在一个请求中完成(在PHP中使用json\u encode()返回数组/对象) 如果没有分数低于100分,那么它就不是100分中的一个,什么也不做

,一旦玩家完成,使用AJAX查找周围的10个分数。您已经有了此部件的SQL查询。您可以使用PHP在服务器端准备HTML,也可以发送原始数据,以便使用Javascript构建HTML。这可以在一个请求中完成(在PHP中使用json\u encode()返回数组/对象) 如果没有分数低于100分,那么它就不是100分中的一个,什么也不做,php,mysql,sql,database-design,jquery,Php,Mysql,Sql,Database Design,Jquery,否则,询问用户名称,并发送一个新的AJAX请求。SQL可以保持简单: 插入到Highscore集合name=?,score=?,when=NOW()中 每次插入后,删除最低分数 当描述限制为1时,按分数ASC从高分订单中删除 如果要防止作弊,需要在ajax调用中添加哈希。例如,发送(username,score,hash=md5(username.score.“secretphrase”),并检查hash是否仍然与用户名和分数匹配 如果要显示排名和分数,请在表中放置一个“rank”列。插入分数时

否则,询问用户名称,并发送一个新的AJAX请求。SQL可以保持简单:

插入到Highscore集合name=?,score=?,when=NOW()中

  • 每次插入后,删除最低分数

    当描述限制为1时,按分数ASC从高分订单中删除

  • 如果要防止作弊,需要在ajax调用中添加哈希。例如,发送(username,score,hash=md5(username.score.“secretphrase”),并检查hash是否仍然与用户名和分数匹配

  • 如果要显示排名和分数,请在表中放置一个“rank”列。插入分数时,将其排名设置为较低分数的最大排名(您已经为第一个AJAX请求计算了该排名,因此在第二个AJAX请求中发送该排名)。然后
    更新Highscore set rank=rank+1,其中分数<?

    • 我不能完全理解你的问题,但基于此:

      “我知道,只要让用户先输入他们的详细信息,然后从前10名的结果中挑出他们是否获得了这些结果,就更容易了,但我的想法是,我希望任何人都能够获得某种输入,因为这将鼓励人们玩得更多。”

      我怀疑您希望显示给用户的分数表看起来像这样:

          1. John Doe (score: 1,000,000)
          2. Larry Roe (score: 999,999)
          3. Jane Doe (score: 985,742)
       ...
       5746. Susan Player (score: 894)
       5747. *** YOU *** (score: 893)
       5748. Joe R. Player (score: 889)
      
      我赞同Mytskine最初的建议,即您根本不应该尝试在DB中存储排名-保持排名列为最新是可能的,就像Mytskine在其答案末尾所显示的那样,但这是一项大量的工作,如果有任何收获的话,也是微乎其微的。只需让您的分数表包含明显的列,如
      name
      score和
      时间
      ,加上一个自动增量列
      id

      现在,让我们假设您想显示N名得分最高的球员,以及新得分前后的K名球员。首先,我们需要计算球员的排名:

      SELECT COUNT(*) + 1 FROM scores WHERE score > ?
      
      在这里,
      是玩家分数的占位符。这计算有多少玩家的分数高于我们将在下面插入的分数。如果我们在平局中支持最新的分数,这个加上一将是玩家的排名。让我们用R表示这个排名

      现在,如果R 否则,我们需要分三步进行:首先,获取前N个条目:

      SELECT * FROM scores ORDER BY score DESC, time DESC LIMIT N
      
      然后,播放器上方的K个条目:

      SELECT * FROM scores WHERE score > ? ORDER BY score ASC, time ASC LIMIT K
      
      SELECT * FROM scores WHERE score <= ? ORDER BY score DESC, time DESC LIMIT K
      
      最后是播放器下面的K项:

      SELECT * FROM scores WHERE score > ? ORDER BY score ASC, time ASC LIMIT K
      
      SELECT * FROM scores WHERE score <= ? ORDER BY score DESC, time DESC LIMIT K
      

      如果你愿意,你也可以在这一点上删除数据库中的最低分数来限制它的大小,但实际上这可能并不重要,除非你有几十亿的玩家。(一个分数条目需要几十个字节,主要取决于玩家输入的名字的长度,所以一百万个条目仍然只有几十兆字节。)但是,你应该记住在
      (分数,时间)上创建索引
      以保持查询效率。

      我无法完全理解您的问题,但基于此:

      “我知道,只要让用户先输入他们的详细信息,然后从前10名的结果中挑出他们是否获得了这些结果,就更容易了,但我的想法是,我希望任何人都能够获得某种输入,因为这将鼓励人们玩得更多。”

      我怀疑您希望显示给用户的分数表看起来像这样:

          1. John Doe (score: 1,000,000)
          2. Larry Roe (score: 999,999)
          3. Jane Doe (score: 985,742)
       ...
       5746. Susan Player (score: 894)
       5747. *** YOU *** (score: 893)
       5748. Joe R. Player (score: 889)
      
      我赞同Mytskine最初的建议,即您根本不应该尝试在DB中存储排名-保持排名列为最新是可能的,就像Mytskine在其答案末尾所显示的那样,但这是一项大量的工作,如果有任何收获的话,也是微乎其微的。只需让您的分数表包含明显的列,如
      name
      score和
      时间
      ,加上一个自动增量列
      id

      现在,让我们假设您想显示N名得分最高的球员,以及新得分前后的K名球员。首先,我们需要计算球员的排名:

      SELECT COUNT(*) + 1 FROM scores WHERE score > ?
      
      在这里,
      是玩家分数的占位符。这计算有多少玩家的分数高于我们将在下面插入的分数。如果我们在平局中支持最新的分数,这个加上一将是玩家的排名。让我们用R表示这个排名

      现在,如果R 否则,我们需要分三步进行:首先,获取前N个条目:

      SELECT * FROM scores ORDER BY score DESC, time DESC LIMIT N
      
      然后,播放器上方的K个条目:

      SELECT * FROM scores WHERE score > ? ORDER BY score ASC, time ASC LIMIT K
      
      SELECT * FROM scores WHERE score <= ? ORDER BY score DESC, time DESC LIMIT K
      
      最后是播放器下面的K项:

      SELECT * FROM scores WHERE score > ? ORDER BY score ASC, time ASC LIMIT K
      
      SELECT * FROM scores WHERE score <= ? ORDER BY score DESC, time DESC LIMIT K
      

      如果你愿意,你也可以在这一点上删除数据库中的最低分数来限制它的大小,但实际上这可能并不重要,除非你有几十亿的玩家。(一个分数条目需要几十个字节,主要取决于玩家输入的名字的长度,所以一百万个条目仍然只有几十兆字节。)但是,你应该记住在
      (分数,时间)
      上创建一个索引,以保持查询的效率。

      你能问一下你的“高级/设计类型问题”吗?我看不出你所描述的有什么困难。你需要什么帮助?对不起,我知道这听起来很糟糕,但我更像是一个前端人员,我对SQL几乎没有经验,但是我意识到我应该单独执行两个SQL查询,然后在构建HTML ta时将输入框放在两组结果之间对于PHP来说,这应该是显而易见的。我想剩下的唯一问题是如何