Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
动态重新排列SQL查询结果上PHP代码块的显示顺序?_Php_Mysql_Dynamic - Fatal编程技术网

动态重新排列SQL查询结果上PHP代码块的显示顺序?

动态重新排列SQL查询结果上PHP代码块的显示顺序?,php,mysql,dynamic,Php,Mysql,Dynamic,在生成缓存的静态页面时,如何根据复杂SQL查询的内容动态地重新排列六个PHP代码块 我有六个功能相同的PHP代码块(下面包括一个示例),每个代码块显示六个游戏中的前五个性能 我将PHP代码包装到一个函数中,但是SQL查询失败了。这是通过将数据库连接器变量作为函数参数发送来解决的,最初的疏忽对我来说既愚蠢又烦人 这是我设计的基本SQL查询,用于为六个游戏中的一个生成平均分数,其他五个游戏在功能上相同 $my_var1 = mysqli_query($connection, "SELECT AVG(

在生成缓存的静态页面时,如何根据复杂SQL查询的内容动态地重新排列六个PHP代码块

我有六个功能相同的PHP代码块(下面包括一个示例),每个代码块显示六个游戏中的前五个性能

我将PHP代码包装到一个
函数中
,但是SQL查询失败了。这是通过将数据库连接器变量作为函数参数发送来解决的,最初的疏忽对我来说既愚蠢又烦人

这是我设计的基本SQL查询,用于为六个游戏中的一个生成平均分数,其他五个游戏在功能上相同

$my_var1 = mysqli_query($connection, "SELECT AVG(score) FROM (SELECT g1_score AS score FROM game_1) TMP");
下面是自定义函数中的代码,用于显示前5个得分块中的一个:

function t5_game_1($connection) {
print "<p>Game 1</p>\n";
print "<table style='margin: 0 auto;'>\n";
$count = 0;
$A = mysqli_query($connection, "
SELECT players.Pname
     , game_1.g1_score
     , game_1.DVN 
  FROM players 
  LEFT 
  JOIN game_1 
    ON players.PID = game_1.PID 
 WHERE game_1.g1_seen = 'Y' 
 ORDER 
    BY game_1.g1_score DESC 
 LIMIT 5
     ");
IF ($AA = mysqli_fetch_array($A)) {
  do {
      print "<tr><td class='w3-left-align'>{$AA[0]}</td><td class='w3-right-align'>{$AA[1]}</td>";
      SWITCH ($AA[2]) {
          CASE 1:
              print "<td class='w3-theme-d5'>Advanced</td>\n";
              break;
          CASE 2:
              print "<td class='w3-theme-d5'>Intermediate</td>\n";
              break;
          CASE 3:
              print "<td class='w3-theme-d5'>Beginner</td>\n";
              break;
          DEFAULT:
              print "<td class='w3-theme-d5'>Beginner</td>\n";
              break;
      }
      $count++;
  } while ($AA = mysqli_fetch_array($A));

}
IF ($count < 5) {
  do {
      print "<tr><td colspan='3'>[Your name could be here]</td></tr>\n";
      $count++;
  } while ($count < 5);
}
print "</table>\n";
}
功能t5_游戏1($connection){
打印“游戏1

\n”; 打印“\n”; $count=0; $A=mysqli\u查询($connection,“ 选择玩家 ,游戏1.g1分 ,game_1.DVN 来自玩家 左边 加入游戏1 关于players.PID=game_1.PID 游戏1.g1所见的位置='Y' 命令 按游戏1.g1评分说明 限制5 "); 如果($AA=mysqli\u fetch\u数组($A)){ 做{ 打印“{$AA[0]}{$AA[1]}”; 交换机($AA[2]){ 案例1: 打印“高级”\n; 打破 案例2: 打印“中间\n”; 打破 案例3: 打印“初学者”\n; 打破 违约: 打印“初学者”\n; 打破 } $count++; }而($AA=mysqli_fetch_数组($A)); } 如果($count<5){ 做{ 打印“[您的名字可能在这里]\n”; $count++; }而($count<5); } 打印“\n”; }

更新:我找到了部分答案,并找到了一个可行的解决方案,这是一个难题,请参见下面的答案。

在建议将新表存储到中间步骤后,我决定使用每小时cron作业生成的缓存页面。这使我可以对SQL查询进行任意复杂的处理,因为它每小时只运行一次。这将导致分配给
$my_var1
的这个怪物SQL查询:

这将返回此数据集:

这是一种格式,我可以使用一个简单的开关/案例来调用包含Top5分数的函数,并按所需顺序显示:

do { 
    SWITCH ($my_query_result) {
        CASE 1:
            t5_game_1($connection);
            BREAK;
        CASE 2:
            t5_game_2($connection);
            BREAK;
        CASE 3:
            t5_game_3($connection);
            BREAK;
        CASE 4:
            t5_game_4($connection);
            BREAK;
        CASE 5:
            t5_game_5($connection);
            BREAK;
        CASE 6:
            t5_game_6($connection);
            BREAK;
    }
} WHILE ($my_query_result = mysqli_fetch_array($my_var1));
(是的,没有默认案例或案例7是故意的)

事情是,由于一些非常奇怪的原因,当在网上直播时,这并没有返回预期的结果。我从来没有弄清楚问题是什么,只是一个补丁,让它可靠地工作。也许您已经在monster查询的最后一个元素或结果的第一行中发现了修复

结果的第一行将不进行分析。它总是会下降到默认的行动,无论什么游戏是在顶部。因此,我添加了一个额外的异常值,以始终领导结果集,并被导致问题的任何因素所破坏。剩下的六行(如果没有数据,则返回null)被传递到开关/案例中,并生成联盟前5名得分的六个区块


这是我通常认为的一个丑陋的解决方案,但它是有效的。尽管我希望能够弄清楚为什么结果集的第一行总是失败,而其余的行总是失败。

我会尝试将尽可能多的数据管理推送到数据库查询。有没有办法在帖子中添加一个简化的问题摘要?我不知道实际的问题是什么。有什么问题吗?@JasonJoslin我可以试着把问题简化一点。我不能使用SQL查询来生成HTML输出。我需要能够根据SQL查询的结果排列PHP中的六个显示块。@是的,有。“如何根据几个SQL查询的结果动态组织六个php代码块的输出。”@Sandor Dosa是您在switch语句中引用的php代码块的实例?
do { 
    SWITCH ($my_query_result) {
        CASE 1:
            t5_game_1($connection);
            BREAK;
        CASE 2:
            t5_game_2($connection);
            BREAK;
        CASE 3:
            t5_game_3($connection);
            BREAK;
        CASE 4:
            t5_game_4($connection);
            BREAK;
        CASE 5:
            t5_game_5($connection);
            BREAK;
        CASE 6:
            t5_game_6($connection);
            BREAK;
    }
} WHILE ($my_query_result = mysqli_fetch_array($my_var1));