【问题标题】:SQL Data: HTML Table display of column data containing multiple rowsSQL 数据:包含多行的列数据的 HTML 表格显示
【发布时间】:2013-12-10 20:16:33
【问题描述】:

我什至不确定如何正确提问,否则我可能会找到答案。所以,我会尽力解释。

我正在使用一个名为 SLDB 的脚本(这些脚本不是我编写的),就目前而言,这些脚本的功能与宣传的一样。我存储的数据,我希望回调到网站表中(不是脚本的设计目的)。

目前,SLDB的设置方式,它以这种方式存储字段:

    ID     Field    Value
    001     name    name1      
    001     size    size1   
    002     name    name2       
    002     size    size2      
    003     name    name3
    003     size    size3

在将变量传递给 database.php 脚本的主脚本中,它将名称和大小作为“字段”传递,然后将它们的每个值作为“值”传递。

我想在网页上显示的是:

    ID      Name    Size    
    001     name1   size1       
    002     name2   size2            
    003     name3   size3

事实上,我更愿意重写原始脚本和 database.php 脚本以这种方式创建和更新表,但在我开始之前,我更愿意找到一种方法来完成我的任务而无需重写,如果可能的话。

我对 mySQL 不够精通,无法理解如何让具有多个变量的字段(字段、值)单独显示在一行中。目前,它是这样打印出来的:

http://wickednight.net/contests/photo-december/results.php

这是我编写的用于在 html 中显示表格的简单 php 脚本:

    <?php
    $con=mysqli_connect("localhost","***","***","***");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }

    $result = mysqli_query($con,"SELECT * FROM sldb_data");

    echo "<table border='1' class='db-table' align='center'>
    <tr>
    <th>Name</th>
    <th>Size</th>
    </tr>";

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

    mysqli_close($con);
    ?>

我意识到,正如所写的那样,这个脚本正在按照要求执行。然而,我认为我需要完成的事情是显而易见的。非常感谢任何帮助。

【问题讨论】:

    标签: php html mysql database html-table


    【解决方案1】:

    这应该可行:

    SELECT t1.uuid, t1.value AS name, t2.value AS size FROM sldb_data t1, sldb_data t2
    WHERE t1.uuid = t2.uuid AND t1.field = "name" AND t2.field = "size"
    

    简短说明:

    您可以为查询中的表指定不同的名称。当您的表格名称很长或无意义时,这很好。这是在 FROM 部分完成的。 “sldb_data t1”将名称“t1”赋予表“sldb_data”。

    由于我们想从同一个表中获取两个不同的行,我们必须使用同一个表两次,但我们必须给它两个不同的名称,否则 mysql 不知道你到底想要什么。你可以把它想象成有两个相同的表。

    现在我们在 t1 where field="name" 中查找一行,在 t2 where field="size" 中查找一行,但只匹配具有相同 uuid 的行。

    在 SELECT 之后,我们只是在结果中列出我们想要的字段。我们再次为这些字段命名。但是对于字段,您必须使用“as”。

    【讨论】:

    • 我完全同意你的看法。对于我正在进行的这个项目,我只想用最简单的解决方案来解决这个问题,但我已经意识到,对于其他应用程序,我将不得不通过重写创建数据库和表所涉及的两个脚本来摸索。我将尝试您的解决方案并报告。感谢您的快速回复。
    • 请补充说明。或者也许是一个链接,指向我可以了解您的选择功能正在做什么的地方?我的数据库是 wreckers_photodec。该表是 sldb_data。在 sldb_data 中,它包含列 id(自动递增的 id)、uuid(为简单起见,我在上面发布为 id)、字段、值。字段列包含行名称、大小,值列包含每个变量的变量。我可以告诉您,您对我的要求很了解,这是我自己有限的知识,使我无法理解您的选择查询... t1、t2 和 test 来自哪里。
    • 很好的解释,谢谢。并且在 phpmyadmin 中查询时完全按照您的预期工作。现在,我只需要让它显示为一个 html 表格,显示每行的每个名称和大小。起初我有一个错误,但问题是我的错。我在上面发布的链接显示了您的解决方案的结果。谢谢你,阿尔瓦。我很感激你。
    【解决方案2】:

    我不确定您想要什么,但我可以说存储表单字段名称及其每个值并不是一个好主意。可能你已经知道我们使用名称和值来使用 post/get 方法插入目的。

    你的 sldb_data 表可能有

    id(PK)名称(varchar)大小(int)

    在三列中,然后像这样更改您的查询

    SELECT name,size FROM sldb_data 
    

    你的代码应该

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

    【讨论】:

    • 感谢您的回复。如果我写了脚本,你的回答就是我会怎么做。但是,当然,我只是在设置完所有内容并运行脚本之后才意识到它在做什么。如果我不得不通过重写脚本来混淆我的方式,这就是我将如何设置它。但是,正如我所说,在我开始之前,我想看看是否有一个简单的解决方案来完成这个项目,然后我会担心为未来的应用程序重写。您的回复确实证实了我最初关于“它应该如何工作”的想法是正确的,所以谢谢你。
    • 请先学习基础知识。如果您没有具体问题,我们无法帮助您。见help
    • 我已经在上面的帖子中说明了我的具体问题。你写的是它“应该如何”,而不是当前问题的解决方案。我正在等待 AlvaHenrik 做出回应,因为我需要的解决方案似乎就是这样。
    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    相关资源
    最近更新 更多