【问题标题】:Fetch data from two SQL tables with INNER JOIN, display HTML table使用 INNER JOIN 从两个 SQL 表中获取数据,显示 HTML 表
【发布时间】:2018-10-29 09:07:57
【问题描述】:

我正在尝试显示一个表格,该表格将打印出我为论坛软件创建的主题列表(有几十个),并使用 INNER JOIN 语句从另一个表格显示它们的版本号。

这是我要打印的 HTML 表格:

主题名称 版本号 ------------------------------------------- 优雅1.7.0 智能1.7.4 咏叹调 1.8.1 等等等等

主题及其 ID 存储在 xf_style 表中:

-------------------------------- style_id |标题 -------------------------------- 1 |优雅 2 |聪明的 3 |咏叹调

主题版本号存储在选项表 xf_style_property 中。后端系统中有数百个选项,每个选项都有一个选项 ID (style_property_id)。我正在寻找的“主题版本”选项的 ID 为“5145”。

xf_style_property 表格

-------------------------------------------------- ------------------ style_id | style_property_id |属性标签 |适当的价值 -------------------------------------------------- ------------------ 1 | 5144 |标志尺寸 | 110像素 2 | 5144 |标志尺寸 | 145像素 3 | 5144 |标志尺寸 | 120像素 1 | 5145 |主题版 | 1.7.0 2 | 5145 |主题版 | 1.7.4 3 | 5145 |主题版 | 1.8.1

此表中有许多重复值。基本上,我想为 style_property_id 等于 5145 的每个主题获取 property_value,并将其与 xf_style 表内部连接。

我的完整脚本:

<?php
$servername = "localhost";
$username = "***";
$password = "***";
$dbname = "***";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";

$sql = "SELECT xf_style.title, xf_style_property.property_value FROM     xf_style_property WHERE property_definition_id = 5145, INNER JOIN xf_style ON xf_style_property.style_id=xf_style.style_id";
$result = $conn->query($sql) or die($conn->error);
?>

<table border="2" style= "background-color: #84ed86; color: #761a9b; margin: 0 auto;" >
  <thead>
    <tr>
      <th>Theme Name</th>
      <th>Theme Version</th>
    </tr>
  </thead>
  <tbody>
    <?php
        while ($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row['title'] . "</td><td>" . $row['property_value'] . "</td></tr>";
        }
      ?>
  </tbody>
</table>

我一直在尝试十几种不同的调整,包括本指南: https://www.w3schools.com/sql/sql_join.asp 和 SE 的其他指南,似乎无法使其工作。如果 SQL 新手提供任何帮助,将不胜感激。

免责声明:property_label 列实际上并不存在.. 我只是为了读者理解而写的。从另一个表中已经知道哪个 ID 代表什么选项标签。

【问题讨论】:

    标签: php sql database join inner-join


    【解决方案1】:

    where 条件在join 之后

    这应该可以解决它

    $sql = "SELECT xf_style.title, xf_style_property.property_value FROM xf_style_property INNER JOIN xf_style ON xf_style_property.style_id=xf_style.style_id" WHERE property_definition_id = 5145,;
    

    否则,如果您想避免重复的主题(即使它们具有不同的属性值),您可以使用Group By

    【讨论】:

    • 谢谢你这是完美的修复!现在工作得很好
    【解决方案2】:

    您的查询应该是

    SELECT xfs.title, xfsp.property_value 
    FROM xf_style_property xfsp
    INNER JOIN xf_style xfs ON xfsp.style_id = xfs.style_id
    WHERE xfsp.style_property_id = 5145
    

    【讨论】:

    • 感谢您的输入,上面的评论已解决,但这有助于我了解不同方法的语法差异
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多