php - 显示 mysql 表中的所有数据以及第二个表中的附加信息

标签 php html mysql

我在 mysql db.Table_1 和 Table_2 中有两个表,我使用以下代码在 HTML 中显示整个表:

<table>
<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "database";
$results = null;
try {
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $stmt = $conn->prepare("SELECT * FROM Table_1"); 
     $stmt->execute();
     $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     $results = $stmt->fetchAll();
}
catch(PDOException $e) {
     echo "Error: " . $e->getMessage();
}
$conn = null;
?> 
<table>
      <thead>
        <tr>
          <th>Name</th>
          <th>Address</th>
          <th>Email</th>
        </tr>
      </thead>
      <tbody>
         <?php foreach($results as $key=>$row) { ?>
        <tr>
      <td><?php echo $row['Name'];?></td>
      <td><?php echo $row['Address'];?></td>
      <td><?php echo $row['Email'];?></td>
    </tr>
     <?php } ?>
       </tbody>
</table>
</table>

现在我想在这个 HTML 表格中再添加一列,其中的数据将来自 Table_2。在这个 Table_2 中,将为 Table_1 中的单个帖子插入多个评论。

我正在使用查询语句查询帖子的最新评论:

SELECT comment FROM Table_2 WHERE id = (SELECT id 
FROM Table_2 WHERE post_id = 10 ORDER BY id DESC LIMIT 1)

这里我们指定 post_id = 10 但是当我使用 SELECT * FROM Table_1"来显示 table_1 中的所有数据时,我应该如何指定显示 table_2 中该特定帖子的最新评论

表一结构:

+-------+---------+---------+---------+
|  id   |  Name   | Address | Email   |
+-------+---------+---------+---------+
|   1   |   ABC   |   ABC   |   ABC   |
|   2   |   DEF   |   DEF   |   DEF   |
+-------+---------+---------+---------+

表 2 结构:

+-------+-------------+---------+
|  id   |  Table_1_id | Comments|
+-------+-------------+---------+
|   1   |     1       |   X     | 
|   2   |     1       |   Y     | 
|   3   |     2       |   Z     | 
+-------+-------------+---------+

要显示的 HTML:

+---------+---------+---------+---------+
|  Name   | Address | Email   | Comments|
+---------+---------+---------+---------+
|   ABC   |   ABC   |   ABC   |    Y    |
|   DEF   |   DEF   |   DEF   |    Z    | 
+---------+---------+---------+---------+

提前致谢。

最佳答案

如果您想获取所有帖子及其最新评论,则可以使用以下查询:

SELECT 
Name,
Address,
Email,
finalTable.comment
FROM 
Table_1
INNER JOIN 
(

        SELECT 
        comment,
        Table_1_id
        FROM Table_2
        INNER JOIN 
        (   SELECT 
             MAX(id) latest_comment_id
            FROM Table_2
            GROUP BY Table_1_id ) latestComments
        ON Table_2.id = latestComments.latest_comment_id
) finalTable
ON finalTable.Table_1_id = Table_1.id;

它会给出如下输出结果:

+---------+---------+---------+---------+
|  Name   | Address | Email   | Comments|
+---------+---------+---------+---------+
|   ABC   |   ABC   |   ABC   |    Y    |
|   DEF   |   DEF   |   DEF   |    Z    | 
+---------+---------+---------+---------+

注意:如果您想要所有帖子,我指的是那些还没有任何评论的帖子,请将 INNER JOIN 替换为 LEFT JOIN

Demo Here

关于php - 显示 mysql 表中的所有数据以及第二个表中的附加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35619974/

相关文章:

javascript - 访问键与热键

jquery - 更改 image.map 区域的不透明度

PHP 脚本在应该失败时仍能正常工作

mysql - 从 SQL 查询到应用程序代码的回溯?

php - 根据记录是否存在使用 Laravel 查询构建器将记录插入到两个表或一个表中

php - 一个 *空* PHP 文件 "<?php",当被包含时,不会被解析并被添加到输出缓冲区,为什么会这样?

php - 在 MySQL 查询之前解码 ISO-8859-1 并编码为 UTF-8

PHP 调用构造函数的参数多于指定的参数

html - 覆盖 Bootstrap 表格行颜色

Mysql 搜索高行数