0

我有一个关于 PHP、MySql 和外键的问题。我了解外键并在两个表之间建立了如下所述的关系:

假设我有 2 个表:“车辆”和“制造商”。

“车辆”表中的每一行都包含一个manufacturerId 列,该列是与“制造商”表相关的外键。这设置得很好,在 PhpMyAdmin 中,当我在“车辆”表中插入新行时,manufacturerId 列有一个下拉菜单,manufacturerId 列为选项。非常好。

但是:在我的应用程序中,当然,我不希望用户在添加新车时必须知道(或必须猜测)“福特”或“宝马”的正确数字是多少,我希望他们可以按名称选择制造商。

但是应用程序如何根据manufacturerId 知道制造商名称呢?应用程序如何知道这两个表之间存在关系?我应该在应用程序中对关系进行硬编码吗?我是否应该修改所有查询以在 2 个表之间进行 JOIN?或者每次我想显示制造商下拉列表时硬编码查询以获取制造商列表?

有没有办法让应用程序了解表之间的关系并能够显示来自文本列而不是用作 ID 的 int 列的数据?

4

1 回答 1

0

假设您的 2 表结构如下:

VEHICLES
id
manufacturerId
vehicleName

MANUFACTURERS
id
manufacturerName

您可以通过像这样查询数据库来为用户创建您的汽车制造商选择菜单:

// query the database
$q = 'SELECT id, manufacturerName FROM manufacturers';
$r = mysqli_query($link, $q);

// display a select menu using id and manufacturerName  
echo '<select name="manufacturer">';
while($row = mysqli_fetch_assoc($r)) {
    echo '<option value="'.$row['id'].'">'.$row['manufacturerName'].'</option>';
}
echo '</select>';

要使用该菜单中的发布数据将车辆和制造商 ID 添加到您的车辆表中:

$q = "INSERT INTO vehicles (manufacturerId, vehicleName) VALUES ({$_POST['manufacturer']}, '{$_POST['vehicleName']}')";
mysqli_query($link, $q);

最后,如果您希望在同一查询中选择车辆名称和制造商,您可以像这样连接表:

// Select vehicle name and manufacturer for vehicle with id of 1
$q = "SELECT v.vehicleName, m.manufacturerName, v.id AS vehicleId, m.id AS manufacturerId
    FROM vehicles AS v, manufacturers AS m 
    WHERE v.manufacturerID = m.id
    AND v.id = 1";
mysqli_query($link, $q);

我认为这应该以一种或另一种方式回答你所有的问题!

于 2012-12-20T19:07:14.510 回答