PHP / MySQL:将一个表的内容与另一个表的内容进行匹配,然后打印出来

时间:2014-11-20 00:24:23

标签: php mysql sql mysqli

我有2个表,bs_reservationsbs_events。第一个包含一堆ID,第二个包含(相同)ID和相应的标题。我试图直接替换从第一张表中获取的ID以及从第二张表中获取的相应标题。

第一个表格为bs_reservations,其中只有eventID列。这是我用来获取ID的PHP代码:

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

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM bs_reservations WHERE serviceID=3";

$result = $conn->query($sql);

if ($result->num_rows > 0) { echo "<table><tr><th>Name</th></tr>";
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["eventID"]. "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>

第二个表格bs_events有两列,idtitleid对应于第一个表格的eventIDtitle是相应的标题。

如何修改上面的代码段,使第一个表格中的eventID与第二个表格的id相匹配,并使用相应的{{1}替换即时$row["eventID"] }?

不要只是使用第二张表,因为第一张表还有其他我提取的列。

2 个答案:

答案 0 :(得分:0)

在查询中使用联接。

SELECT r.*, e.title FROM bs_reservations as r JOIN bs_events as e on r.event_id = e.id WHERE r.serviceID = 3

然后在你的循环中你可以回显标题。假设预订表没有标题列,那么您可能希望将其重命名为..., e.title as eventTitle FROM ...

echo "<tr><td>" . $row["title"]. "</td></tr>";

答案 1 :(得分:0)

您可以在查询中使用JOIN指令:

$sql = "SELECT *
        FROM `bs_reservations`
        JOIN `bs_events` ON `bs_reservations`.`eventID` = `bs_events`.`id`
        WHERE `bs_reservations`.`serviceID`=3";

然后,您可以访问每一行的title属性,就像它在同一个表中一样:

echo "<tr><td>" . $row["title"]. "</td></tr>";

<强>更新

如果您还需要没有预订的活动,可以使用RIGHT OUTER JOIN

$sql = "SELECT *
        FROM `bs_reservations`
        RIGHT OUTER JOIN `bs_events` ON `bs_reservations`.`eventID` = `bs_events`.`id`
        WHERE `bs_reservations`.`serviceID`=3";