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