Php 如何在html表中填充UNION ALL查询数据

Php 如何在html表中填充UNION ALL查询数据,php,mysql,union-all,Php,Mysql,Union All,如何使用PHP和MYSQL获取的两侧标题填充html表中的数据。我没有得到想要的输出显示,就像在所需的输出图像中一样 $query = $db->prepare("SELECT player, score FROM cricket_table WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01' UNION ALL SELECT player, score FROM football_table WHERE dateby BETWEEN '2

如何使用PHP和MYSQL获取的两侧标题填充html表中的数据。我没有得到想要的输出显示,就像在所需的输出图像中一样

$query = $db->prepare("SELECT player, score FROM cricket_table WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
UNION ALL
SELECT player, score FROM football_table WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'");
$query->execute; 
echo '<table><tr><th>Player Name</th><th>Cricket</th><th>Football</th></tr>';
while($row = $query->fetch(PDO:: FETCH_ASSOC) ) {
echo '<tr>
        <td>'.$row['player'].'</td>
        <td>'.$row['score'].'</td>
     </tr>';
}
echo '</table>';
这是我们想要的

这是电流输出

现在尝试输出表格

while($row = $query->fetch(PDO:: FETCH_ASSOC) ) {
echo '<tr>
        <td>'.$row['player'].'</td>
        <td>'.$row['cr_score'].'</td>
        <td>'.$row['fb_score'].'</td>
     </tr>';
}

无法对其进行测试,但您得到了大致思路,应该可以使用UNION ALL并对每列所需的值求和:

这是您的SQL。注意,它将使用union all运行两个查询,然后对每个值求和。我们将使用0零技巧忽略错误的表:

SELECT x.player, SUM(x.cricket_score) as cricket_score, SUM(x.football_score) as football_score FROM (
    SELECT player, SUM(score) as cricket_score, 0 as football_score
      FROM cricket_table
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
     UNION ALL
    SELECT player, 0 as cricket_score, SUM(score) as football_score
      FROM football_table 
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
) x
GROUP BY x.player
并适用于该守则:

$query = $db->prepare("    SELECT x.player, SUM(x.cricket_score) as cricket_score, SUM(x.football_score) as football_score FROM (
    SELECT player, SUM(score) as cricket_score, 0 as football_score
      FROM cricket_table
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
     UNION ALL
    SELECT player, 0 as cricket_score, SUM(score) as football_score
      FROM football_table 
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
) x
GROUP BY x.player");
$query->execute();
echo '<table><tr><th>Player Name</th><th>Cricket</th><th>Football</th></tr>';
while($row = $query->fetch(PDO:: FETCH_ASSOC) ) {
    echo '<tr>
        <td>'.$row['player'].'</td>
        <td>'.$row['cricket_score'].'</td>
        <td>'.$row['football_score'].'</td>
     </tr>';
}
echo '</table>';

使用此SQL,您将获得cricket或football已经设置的值。

除了您提供的代码无效之外,您还有什么问题?我没有得到我想要的输出显示,如上面所需的输出图像。如果不同表中有相同的列,为什么不只使用一个表和标志?例如,在WordPress中,他们有wp_posts表和post_type,其中存储了post的类型,例如:产品、附件、post等。您可以在旗帜中的位置执行相同的操作,例如:sport_type您可以存储值,如cricket,足球等。然后你可以使用左JOINUNION,因为返回的结果就像你只查询一个表一样。您必须使用外键连接,外键可以是player\u id:从players中选择a.*,c.*,f.*作为左连接cricket\u表作为a.player\u id=c.player\u id左连接football\u表作为f作为a.player\u id=f.player\u id请提供真实的示例数据,或者如果运动员不一定有每项运动的分数,您可以使用case和nulls,或者别的什么,但这是一个简单的版本,我试过这个方法。它返回了错误的结果,并且提交了较大的日期范围,如2年之间。mysql服务器停止工作。通过结束mysql进程,并给出以下错误警告:未捕获PDO异常:PDO::_构造:mysql服务器已在union中消失,它返回正确的结果,但未正确填充到html表中。它返回板球和足球的板球数据。比如如果板球得分是44,那么足球的得分也是44。每一列的数据来源是不同的。您确定使用的是完全相同的代码,和/或表具有不同的数据吗?我不明白它是如何发生的,正如你所描述的。是的,我使用的是精确的方法,所有的表都有彼此不同的数据。它完全按照预期工作:。。您确定使用的是相同的代码吗?如果有更多的表,则需要为列指定不同的名称,并在所有列中使用0零技巧。这取决于数据的存储方式。您可以尝试添加时间部分,以确保它将获得日内小时数,如2020-05-03 00:00:00和2020-05-03 23:59:59
$query = $db->prepare("    SELECT x.player, SUM(x.cricket_score) as cricket_score, SUM(x.football_score) as football_score FROM (
    SELECT player, SUM(score) as cricket_score, 0 as football_score
      FROM cricket_table
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
     UNION ALL
    SELECT player, 0 as cricket_score, SUM(score) as football_score
      FROM football_table 
     WHERE dateby BETWEEN '2020-01-01' AND '2020-03-01'
     GROUP BY player
) x
GROUP BY x.player");
$query->execute();
echo '<table><tr><th>Player Name</th><th>Cricket</th><th>Football</th></tr>';
while($row = $query->fetch(PDO:: FETCH_ASSOC) ) {
    echo '<tr>
        <td>'.$row['player'].'</td>
        <td>'.$row['cricket_score'].'</td>
        <td>'.$row['football_score'].'</td>
     </tr>';
}
echo '</table>';