如何显示与 1 个表不同的表?就像每个表都有唯一的代码
Posted
技术标签:
【中文标题】如何显示与 1 个表不同的表?就像每个表都有唯一的代码【英文标题】:How do I display different table from 1 table? Like each table has unique code 【发布时间】:2022-01-22 15:40:12 【问题描述】:这是我的数据库表:
但我的查询只为每个表获取 1 行,如下所示:
如您所见,1003 有 2 个表,因为它有 2 行。它应该只有一 (1) 个 1003 表,有 2 行。我该如何解决?预期结果:
// Attempt select query execution
$query = "SELECT model, brand_code FROM smartphone GROUP BY model";
if($result = mysqli_query($db, $query))
if(mysqli_num_rows($result) > 0)
while($row = mysqli_fetch_array($result))
?>
<?php echo $row["brand_code"]?>
<table id="table_stock" class="">
<thead>
<tr>
<th>Model</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $row["model"]?></td>
</tr>
</tbody>
</table><br>
<?php
/// Free result
mysqli_free_result($result);
else
echo "<td class='no_record' colspan='7'>No records found.</td>";
else
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
【问题讨论】:
只有tr
,模型必须在mysqli_fetch_array
里面,其他表结构在外面
你能告诉我吗?我已经这样做了至少一个星期,*** 是我经过一些研究等后的最后选择。我是编程新手
【参考方案1】:
你这里至少有 5 个问题,
[编辑:根据扩展答案删除问题 1 并更改样本]
在您的 while ...
循环中,您正在打印整个表格,而您应该只在其中打印 <tr>...</tr>
部分。这就是导致额外表格的原因。
第三个问题:您的“no_record”行是一个松散的<td>
。它不仅不在表格内(问题 #2 中涉及),而且也没有用 <tr>
包裹。
第 4 个问题:您在表格外随机打印echo $row["brand_code"]
。
第 5 个问题:您正在从数据库中打印原始数据,就好像它是有效的 html 一样,但很可能不是。它可能必须使用htmlentities
/htmlspecialchars
进行编码。
快速而肮脏的固定版本:
function tableOpen($row)
printf( '<h1>%s</h1>', htmlentities($row["brand_code"]) );
echo '<table id="table_stock" class="">';
echo '<thead>';
echo '<tr>';
echo '<th>Model</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
function tableClose()
echo '</tbody>';
echo '</table><br>';
// Attempt select query execution
$query = "SELECT model, brand_code FROM smartphone ORDER BY brand_code";
$lastBrand = null;
if ($result = mysqli_query($db, $query))
if (mysqli_num_rows($result) > 0)
if ($lastBrand !== $row["brand_code"] && !is_null($lastBrand)) tableClose();
if ($lastBrand !== $row["brand_code"]) tableOpen($row);
$lastBrand = $row["brand_code"];
while ($row = mysqli_fetch_array($result))
echo '<tr>';
printf( '<td>%s</td>', htmlentities($row["model"]) );
echo '</tr>';
tableClose();
/// Free result
mysqli_free_result($result);
else
echo '<p class="no_record">No records found.</p>';
else
echo "ERROR: Not able to execute \$query: <br>" . htmlentities($query) . '<br>' . htmlentities(mysqli_error($link));
【讨论】:
感谢您指出先生。我会保留您的回复以提高自己。但这不是我预期的结果。我已经更新了我的问题中的预期结果。 (更新)我明白了,是的,这是非常不同的;我已经根据您的预期输出更新了上面的代码。 非常感谢您,先生!一旦获得特权,我将投票。【参考方案2】:您需要额外的循环。同样在第一个查询中,您需要使用分组代码。
$query = "SELECT model, brand_code FROM smartphone GROUP BY brand_code";
if($result = mysqli_query($db, $query))
if(mysqli_num_rows($result) > 0)
while($row = mysqli_fetch_array($result))
?>
<?php echo $row["brand_code"]?>
<table id="table_stock" class="">
<thead>
<tr>
<th>Model</th>
</tr>
</thead>
<tbody>
<?php
if ($result1 = mysqli_query($db, "SELECT DISTINCT model, brand_code FROM smartphone WHERE brand_code=$row["brand_code"]"))
while ($row1 = mysqli_fetch_array($result1))
// get count for each model within brand_code
$cnt = ($result2 = mysqli_query($db, "SELECT COUNT(*) AS cnt FROM smartphone WHERE brand_code=$row["brand_code"] AND model='$row1["model"]'")) && ($row2 = mysqli_fetch_array($result2)) ? $row2["cnt"] : "---";
?>
<tr>
<td><?php echo $row1["model"] ($cnt)?></td>
</tr>
<?php
mysqli_free_result($result1);
?>
</tbody>
</table><br>
<?php
/// Free result
mysqli_free_result($result);
else
echo "<td class='no_record' colspan='7'>No records found.</td>";
else
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
【讨论】:
试过了,但它只显示 1 个表格中的所有模型 查看更新的答案 是的,这正是我所期望的。先生非常感谢您!我肯定会学到更多。但是我如何保持相同的模型是不同的行?请参阅有关“预期结果”的更新问题 只需将 DISTINCT 添加到 sql 查询中。查看更新的答案 非常感谢您的帮助,先生!一旦我获得 15 个声望,我将投票以上是关于如何显示与 1 个表不同的表?就像每个表都有唯一的代码的主要内容,如果未能解决你的问题,请参考以下文章