如何显示与 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 ... 循环中,您正在打印整个表格,而您应该只在其中打印 &lt;tr&gt;...&lt;/tr&gt; 部分。这就是导致额外表格的原因。


第三个问题:您的“no_record”行是一个松散的&lt;td&gt;。它不仅不在表格内(问题 #2 中涉及),而且也没有用 &lt;tr&gt; 包裹。


第 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 个表不同的表?就像每个表都有唯一的代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 数据库中组织 10.000 个不同大小的表 [关闭]

如何组合来自4个mysql表的数据

在具有四个表的Oracle数据库中创建视图,每个表都有主键

Java - 合并来自不同数据源中的 2 个表的数据

如何在 SQL 中加入六个表,同时只包含某些行?

在代理键的情况下单独的表?