【问题标题】:How to display value against foreign key from parent table?如何针对父表中的外键显示值?
【发布时间】:2019-01-31 14:45:47
【问题描述】:

我有 2 台桌子制造商和汽车。

制造商有 2 列 make_id & make.make_id 此表用作外键

在 cars table.cars 表中有 3 列 car_id、make_id、price。

现在我想在制造商表中显示针对 make_id 的值。现在它不显示值它只是显示 id 。

<?php
        $conn=mysqli_connect("localhost","root","","practice");
        if($conn-> connect_error){
        die("Connection field:". $conn-> connection_error);
    }$sql="SELECT car_id,make_id,price from cars ";
    $result=$conn->query($sql);
   if($result->num_rows>0){
   while($row=$result->fetch_assoc()){
   echo"<tr><td>".$row["car_id"]."</td><td>".$row["make_id"]."</td> 
   <td>".$row["price"]."</td></tr>";
   }
   echo"</table>";
   }else {
   echo"0 result";
   }
    $conn->close();
        ?>

【问题讨论】:

  • 顺便说一句:不要调用$conn-&gt; connect_error 两次,只需检查条件中的!$conn。此外,if($result-&gt;num_rows&gt;0){ 将在没有 &gt;0 的情况下工作。

标签: php


【解决方案1】:

将您的查询更改为:

$sql = "SELECT c.car_id, m.make, c.price 
        FROM cars AS c JOIN makers AS m ON c.make_id = m.make_id ORDER BY c.car_id";

您正在使用通过外键连接的两个表(汽车和制造商)。因此,您必须使用 JOIN 查询从两个表中选择列,并将汽车表上的外键映射到 maker 表上的主键(在您的情况下,汽车表上的 make_id 和 makers 表上的 make_id)在两个表上都匹配使用 ON 关键字。

您的新代码现在应该如下所示:

<?php
    $conn = mysqli_connect("localhost", "root", "", "practice");
    if ($conn->connect_error) {
        die("Connection field:" . $conn->connection_error);
    }
    $sql = "SELECT c.car_id, m.make, c.price FROM cars AS c JOIN makers AS m ON c.make_id = m.make_id ORDER BY c.car_id";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo "<tr><td>" . $row["car_id"] . "</td><td>" . $row["make"] . "</td>  // Notice that I changed $row['make_id'] to $row['make']
       <td>" . $row["price"] . "</td></tr>";
        }
        echo "</table>";
    } else {
        echo "0 result";
    }
    $conn->close();
?>

【讨论】:

  • 它工作了一个小问题,但我现在会处理
  • 你把 $row['make_id'] 改成 $row['make'] 了吗?
  • 好一个。只是一个旁注......您可能希望始终将表的 id(主键)列命名为“id”。例如,您将“car_id”作为汽车表中的主键。最好在未来的项目中将其命名为“id”,如果您打算将其用作其他表中的外键,则使用“car_id”。简而言之,您的 id(主键)列应遵循“id”命名约定……而您的外键应遵循……“table-name_id”约定。你明白吗?...请不要忘记接受答案。谢谢
  • 为什么它不根据汽车表中的 car_id 值显示行会根据 makers 表中的外键值感染其显示行。
  • 如果 BMW 是针对 car_id 5 存储的,那么它应该出现在第 5 行,但由于它保存在 maker 表的第 1 行,所以它显示在浏览器的第 1 行
猜你喜欢
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
相关资源
最近更新 更多