簡體   English   中英

使用外鍵時顯示替代列

[英]Displaying alternate column when using foreign keys

我有一個關於PHP,MySql和外鍵的問題。 我了解外鍵,並在兩個表之間建立了關系,如下所述:

假設我有2個表格:“ 車輛 ”和“ 制造商 ”。

車輛 ”表中的每一行都包含一個“ ManufacturerId”列,該列是與“ Manufacturers ”表相關的外鍵。 設置很好,在PhpMyAdmin中,當我在' Vehicles '表中插入新行時,ManufacturerId列具有一個下拉菜單,其中列出了ManufacturerId。 非常好。

但是:在我的應用程序中,我當然不希望用戶在添加新車時必須知道(或猜測)“福特”或“寶馬”的正確數字是多少,我希望他們能夠按名稱選擇制造商。

但是應用程序如何基於廠商ID知道廠商名稱? 應用程序如何知道2個表之間存在關系? 我應該在應用程序中對關系進行硬編碼嗎? 我是否應該修改所有查詢以在2個表之間建立JOIN? 還是每次我要顯示制造商下拉列表時,對查詢進行硬編碼以獲取制造商列表?

應用程序是否有辦法了解表之間的關系,並能夠顯示來自文本列而不是用作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>';

要使用該菜單中的發布數據將車輛和制造商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);

我認為這應該以一種或另一種方式回答您所有的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM