我有2个表,bs_reservations
和bs_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
有两列,id
和title
。 id
对应于第一个表格的eventID
,title
是相应的标题。
如何修改上面的代码段,使第一个表格中的eventID
与第二个表格的id
相匹配,并使用相应的{{1}替换即时$row["eventID"]
}?
不要只是使用第二张表,因为第一张表还有其他我提取的列。
答案 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";