php以列和行的形式列出html表中的mysql数据

php以列和行的形式列出html表中的mysql数据,php,mysql,html-table,Php,Mysql,Html Table,我的数据库中有两个表,player和score表。我在这些表中有数据,我想把我的分数表中的数据列到一个HTML表中。我希望球员的名字是列,球员的分数是行。我已经看到了如何添加带有预定义列的行的示例,但还没有看到如何添加将数据设置为列的示例。由于player name在player表中,所以我必须使用join函数来显示player name,但不知道如何使用php来实现这一点。我是php新手,所以我已经在这方面停留了一段时间 数据库 玩家表: 评分表: 我的分数数据包括: scoreid: 1,

我的数据库中有两个表,player和score表。我在这些表中有数据,我想把我的分数表中的数据列到一个HTML表中。我希望球员的名字是列,球员的分数是行。我已经看到了如何添加带有预定义列的行的示例,但还没有看到如何添加将数据设置为列的示例。由于player name在player表中,所以我必须使用join函数来显示player name,但不知道如何使用php来实现这一点。我是php新手,所以我已经在这方面停留了一段时间

数据库

玩家表:

评分表:

我的分数数据包括:

scoreid: 1, score: 53, playerid: 1
scoreid: 2, score: 23, playerid: 1 
scoreid: 3, score: 12, playerid: 2 
scoreid: 4, score: 67, playerid: 3 
scoreid: 5, score: 31, playerid: 2  
PHP: 这是我现在的工作,但它只显示名称

等等

正如您所看到的,球员姓名是对应于球员的列,分数是对应于球员的行中的数据

可以这样想:

玩家表有:

评分表包括:

希望你现在能更好地理解

输出

这是以前的样子

现在的结果是这样的:

您必须使用连接,如下所示:

$result = mysqli_query($conn,"SELECT player.*, score.* FROM player LEFT JOIN score ON score.playerid = player.playerid ");

echo "<table>
<tr>
<th>Name</th>
<th>Last Name</th>
<th>Score</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['score'] . "</td>";
echo "</tr>";
}
echo "</table>";

要使表在列中显示行数据,最好的方法是在表中使用表,因为必须以HTML逐行构建表

然后,要获得一名球员的所有分数,您可以通过单独的请求请求每个球员的数据,也可以使用小组讨论

$result = mysqli_query($conn,"SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p");
现在,您的结果将包含玩家表的所有列和一个列scorearray,该列包含玩家所有分数的逗号分隔列表

要生成第一行,可以重用给定代码:

$result = mysqli_query($conn, "SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p");


$playercols = array(); 
$scores = array(); 

while($row = mysqli_fetch_array($result)) 
{ 
    $playercols[] =  "<th>" . $row['name'] . "</th>"; 
    $currentscore = explode(",", $row['scorearray']); 
    // Only doing a line break, you can build a one-columned table out of this data aswell 
    $scores[] = "<td valign=top>" . implode("<br />", $currentscore) . "</td>"; 
} 
echo "<table>"; 
echo "<tr>"; 
echo implode("", $playercols); 
echo "</tr>"; 
echo "<tr>"; 
echo implode("", $scores); 
echo "</tr>"; 
echo "</table>"; 
请参见此处的结果:


这里有完整的资料来源:

那么你能举例说明一下你的桌子应该是什么样子吗?您是否希望球员的分数在球员姓名旁边的新列中显示?或者你想让它们一行一行地显示出来?只是更新了我的问题,显示了想要的结果对不起,但我真的不知道给定的数据属于哪里-你使用了2、3、1、12、12和23-但这些不是本栏中玩家的全部分数?!我再次更新了我的问题,显示了更详细的内容,你可以看到Jonny的分数是23分和12分,Mike的分数是10分和31分等等。这些是相应球员的分数。谢谢,你知道是否可以将球员的名字作为列?并将分数显示为球员的行?尝试搜索此示例一段时间,但没有成功。我已经编辑了我的问题,显示了想要的结果。由于某种原因,该代码似乎不起作用。我已经编辑了我的$result&将我的表内容更改为您提供的代码,甚至尝试了回显,最后尝试了,但没有。我没有得到任何输出。你能给我举个例子吗,或者我不想用它吗?t是什么?playerid只是想知道你在哪里定义了t是什么我看到你有分数s,但t没有,你能解释一下这意味着什么吗?代码在其中,s.playerid=t.playeridSorry,这似乎是一个输入错误。我的意思是p.playerid而不是t.playerid,它是从玩家p中定义的,你说没有输出是什么意思?是否已打开错误报告?那么请给出错误消息。我无法测试这段代码,可能有一些拼写错误/语法错误。在我将t.playerid更改为p.playerid之后。我得到了结果。但是输出结果与我期望的Bill GatesJohnSteve工作不一样55 50 5522 50 70 2250 100 30 22 22 22 70 30我会更新我的问题,让你看得更清楚
| Jonny  |  Mike  |  Bill  |
|   23   |   10   |   12   |
|   12   |   31   |   23   |
id: 1. name: Jonny
id: 2. name: Mike
id: 3. name: Bill
scoreid: 1, score: 23, playerid: 1 (Jonny)
scoreid: 2, score: 12, playerid: 1 (Jonny)
scoreid: 3, score: 10, playerid: 2 (Mike)
scoreid: 4, score: 31, playerid: 2 (Mike)
scoreid: 5, score: 12, playerid: 3 (Bill)
scoreid: 6, score: 23, playerid: 3 (Bill) 
$result = mysqli_query($conn,"SELECT player.*, score.* FROM player LEFT JOIN score ON score.playerid = player.playerid ");

echo "<table>
<tr>
<th>Name</th>
<th>Last Name</th>
<th>Score</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['score'] . "</td>";
echo "</tr>";
}
echo "</table>";
$result = mysqli_query($conn,"SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p");
$result = mysqli_query($conn, "SELECT p.*, (SELECT GROUP_CONCAT(s.score) FROM score s WHERE s.playerid = p.playerid) AS scorearray FROM player p");


$playercols = array(); 
$scores = array(); 

while($row = mysqli_fetch_array($result)) 
{ 
    $playercols[] =  "<th>" . $row['name'] . "</th>"; 
    $currentscore = explode(",", $row['scorearray']); 
    // Only doing a line break, you can build a one-columned table out of this data aswell 
    $scores[] = "<td valign=top>" . implode("<br />", $currentscore) . "</td>"; 
} 
echo "<table>"; 
echo "<tr>"; 
echo implode("", $playercols); 
echo "</tr>"; 
echo "<tr>"; 
echo implode("", $scores); 
echo "</tr>"; 
echo "</table>";