使用外键时显示备用列

时间:2012-12-20 18:46:34

标签: php mysql foreign-keys

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

假设我有两张桌子:'车辆'和'制造商'。

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

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

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

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

1 个答案:

答案 0 :(得分: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>';

使用该菜单中的帖子数据添加车辆&amp;制造商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);

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