0

PHP、MySql、および外部キーに関する問題があります。私は外部キーを理解しており、説明されているように 2 つのテーブル間に関係があります。

「車両」と「メーカー」の 2 つのテーブルがあるとします。

「 vehicle 」テーブルの各行には、「 manufacturer 」テーブルに関連する外部キーである manufacturerId 列が含まれています。PhpMyAdmin で「vehicle」テーブルに新しい行を挿入すると、manufacturerId 列に、manufacturerId がオプションとしてリストされたドロップダウン メニューが表示されます。非常に素晴らしい。

しかし、もちろん、私のアプリケーションでは、ユーザーが新しい車両を追加するときに、「フォード」または「BMW」の正しい番号を知る必要はありません (または推測する必要があります)。メーカー名から選べます。

しかし、アプリケーションは、manufacturerId に基づいてどのようにしてメーカー名を認識しているのでしょうか? アプリケーションは、2 つのテーブル間に関係があることをどのように認識しますか? アプリケーションで関係をハードコーディングする必要がありますか? 2 つのテーブル間で JOIN を持つようにすべてのクエリを変更する必要がありますか? または、製造元のドロップダウンを表示するたびに、製造元のリストを取得するクエリをハードコーディングしますか?

アプリケーションがテーブル間の関係を認識し、ID として使用される int 列の代わりに text 列からデータを表示できるようにする方法はありますか?

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 に答える