繁体   English   中英

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

[英]php listing mysql data in html table in columns and rows

我的数据库,播放器和分数表中有2个表。 我在这些表中有数据,并希望将我的分数表中的数据列出到HTML表。 我希望玩家名称是列,玩家的分数是行。 我已经看到了如何添加具有预定义列的行的示例,但是没有看到有关如何将数据设置为列的示例。 由于玩家名称在播放器表中,我将不得不使用join函数来显示播放器名称,不知道如何使用php执行此操作。 我是php的新手,所以一直坚持这一点。

数据库

球员表:

playerid
name
lastname

得分表:

scoreid
score
playerid (foreign key with player.playerid)

我的分数数据包含ex:

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 * FROM player");

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

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

想要的结果

| 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) 

希望你现在能更好地理解

产量

这就是它以前的样子

在此输入图像描述

现在结果如下:

在此输入图像描述

你必须使用JOIN ,顺序如下:

$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表。

然后,要获得玩家的所有分数,您可以通过单独请求为每个玩家请求数据,也可以使用GROUP_CONCAT。

$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”列,其中包含以逗号分隔的播放器所有分数列表。 请参阅GROUP_CONCAT示例

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

$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>"; 

在此处查看结果: 结果

在这里完整来源: 来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM