php - PHP MYSQL 嵌套连接
问题描述
<?php
require "includes/dbh_l4d2.php";
$sql = "
SELECT *
FROM vpk
JOIN maps
ON vpk.vpk_id = maps.vpk_id";
$result = mysqli_query($conn, $sql);
?>
<!DOCTYPE html><html><head><title>Website Title</title>
<link rel = "stylesheet" type = "text/css" href = "assets/css/tek_style.css" /></head>
<body>
<table>
<tr><th>VPK</th><th>MAP</th></tr>
<?php
$result_num_rows = mysqli_num_rows($result);
if( $result_num_rows> 0) {
//while($row = mysqli_fetch_array($result)) {
while($row = $result->fetch_assoc()) {
echo '<tr><td id="'.$row["alpha_anchor"].'" rowspan="'.$row["map_count"].'" class="first_row">'.
'<h3 id="'.$row["anchor"].'">'.$row["vpk_title"].'</h3>'.$row["vpk_file"].'<br>'.
'<a class="details" href="'.$row[details].'">Details</a> '.
'<i><a href="'.$row[download].'">Download vpk</a></i>'.
'</td></tr>';
for ($i=0; $i < $row["map_count"]-1; $i++) {
echo '<tr><td>'.$row["map_name"].'></td></tr>';
}
}
}
?>
</table></body></html>
这是代码的输出
这就是我想要的样子
解决方案
您的嵌套循环map_name
来自同一行,而不是每一行结果。
您可以做的是GROUP_CONCAT()
将所有地图名称组合成一行结果,然后explode()
在创建表时将它们拆分。
<?php
require "includes/dbh_l4d2.php";
$sql = "SELECT vpk.*, GROUP_CONCAT(maps.map_name) AS map_names
FROM vpk
INNER JOIN maps ON vpk.vpk_id = maps.vpk_id
GROUP BY vpk.vpk_id";
//$sql = "SELECT * FROM vpk, maps JOIN vpk ON vpk.vpk_id = maps.vpk_id";
$result = mysqli_query($conn, $sql);
?>
<!DOCTYPE html><html><head><title>Website Title</title>
<link rel = "stylesheet" type = "text/css" href = "assets/css/tek_style.css" /></head>
<body>
<table>
<tr><th>VPK</th><th>MAP</th></tr>
<?php
$result_num_rows = mysqli_num_rows($result);
if( $result_num_rows> 0) {
//while($row = mysqli_fetch_array($result)) {
while($row = $result->fetch_assoc()) {
$map_names = explode(',', $row['map_names']);
echo '<tr><td id="'.$row["alpha_anchor"].'" rowspan="'.$row["map_count"].'" class="first_row">'.
'<h3 id="'.$row["anchor"].'">'.$row["vpk_title"].'</h3>'.$row["vpk_file"].'<br>'.
'<a class="details" href="'.$row[details].'">Details</a> '.
'<i><a href="'.$row[download].'">Download vpk</a></i>'.
'</td></tr>';
foreach ($map_names as $map_name) {
echo '<tr><td>'.$map_name.'></td></tr>';
}
}
}
?>
</table></body></html>
推荐阅读
- python - 获取 multiprocess.Process 的整个标准输出并在当前控制台中实时显示
- python-3.x - Python ldap3基于变量打印条目
- jquery - jQuery on 单击元素内的所有内容
- r - 迭代导入excel文件并在R中按文件名平均匹配值
- javascript - preg_match 不工作的 php 和 java 脚本
- python - 从字符串列表中删除空格变化的 Python 最佳实践
- mysql - 在 phpMyAdmin 上保存数据库 - mySQL
- pandas - 在 read_csv 中使用 dtype 对象会引发 UnboundLocalError
- tensorflow - 记录消息分类/分组并为每个组查找人类可读的模式
- google-chrome - 如何使用 CLI 在 Chromebox 上禁用有问题的“Chrome 媒体路由器”(Chromecast) 扩展?