Php 使用外键时显示备用列

Php 使用外键时显示备用列,php,mysql,foreign-keys,Php,Mysql,Foreign Keys,我有一个关于PHP、MySql和外键的问题。我了解外键,并在两个表之间建立了如下所述的关系: 假设我有两张表:“车辆”和“制造商” “vehicles”表中的每一行都包含一个manufacturerId列,该列是与“manufacturers”表相关的外键。这是很好的设置,在PhpMyAdmin中,当我在“vehicles”表中插入新行时,manufacturerId列有一个下拉菜单,其中manufacturerId列作为选项列出。非常好 但是:当然,在我的应用程序中,我不希望用户在添加新车时知

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

假设我有两张表:“车辆”和“制造商”

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

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


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


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

假设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>';
您可以通过如下方式查询数据库,为用户创建车辆制造商选择菜单:

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>';
最后,如果您希望在同一查询中选择车辆名称和制造商,请按如下方式连接表:

// 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);

我认为这应该以这样或那样的方式回答你所有的问题

我是否应该修改所有查询以在两个表之间建立连接?(是的)或者每次我想显示制造商下拉列表时,硬编码查询以获得制造商列表?(是/否)我会用不同的方法编写一个对象来获取这样的数据。是的,我在那里有点误导,我有一个类包装了这类东西。这就是我希望避免的。我希望我能够使用descripe来查找外键的位置,然后能够从外键表中选择值并与外键一起使用。我想我必须按照你描述的方式去做,除非有人想出更好的主意。