[英]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.