使用INNER JOIN从两个SQL表中获取数据,显示HTML表

时间:2018-05-18 21:33:47

标签: php sql database join inner-join

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

这是我要打印的HTML表格:

Theme Name     Version Number
-------------------------------
Elegance       1.7.0
Smarty         1.7.4
Aria           1.8.1
etc etc

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

--------------------------------
style_id   |  title
--------------------------------
1          |  Elegance
2          |  Smarty
3          |  Aria

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

xf_style_property

---------------------------------------------------------------------
style_id  |  style_property_id  |  property_label  |  property_value
---------------------------------------------------------------------
1         |  5144               |  Logo Size       |  110px
2         |  5144               |  Logo Size       |  145px
3         |  5144               |  Logo Size       |  120px
1         |  5145               |  Theme Version   |  1.7.0
2         |  5145               |  Theme Version   |  1.7.4
3         |  5145               |  Theme Version   |  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代表什么选项标签。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的查询应该只是

print()