3

アダプター、コネクター、コンポーネントの3つのテーブルが
あります。対応する部品番号(part_num)を見つけるためにそれらすべてを検索できるようにする必要があります
。部品番号は一意であるため、複数のエントリについて心配する必要はありません。

GETを使用してURL内の部品番号を検索し、それを$ numに設定してから、SELECTを実行します。

私が見つけたのは、UNIONを使用する必要があるということですが、3つのテーブルの列が異なり、選択を実行しようとするとエラーが発生します。以下の例では

UNIONを使用して他のテーブルから参照を検索する

これは私のコードです:

if(isset($_GET['num'])) {
$num = $_GET['num'];

$result = mysql_query("SELECT * FROM connectors WHERE part_num = '$num' UNION SELECT * FROM adapters WHERE part_num = '$num' UNION SELECT * FROM components WHERE part_num = '$num'"); }

助けていただければ幸いですので、よろしくお願いしますSO =)

4

3 に答える 3

2

おそらく、それぞれがどのタイプのテーブルに割り当てられているPartsかを識別する4番目のテーブルが必要です。part_numただし、それがなくても、外部結合を使用して目的の結果を得ることができます(ただし無駄です)。

SELECT * FROM
             connectors
   LEFT JOIN adapters   USING(part_num)
   LEFT JOIN components USING(part_num)
WHERE
   part_num = ?

プリペアドステートメントを実際?に使用する必要があるため、私が使用したことに注意してください。理由やその内容がわからない場合は、BobbyTablesについてお読みください

于 2012-04-27T21:58:11.820 に答える
1

すべての列ではなく、タイトルなどだけを取り上げてはどうでしょうか。

$sSql = "SELECT id, title, 1 FROM connectors WHERE part_num = '$num' 
UNION 
SELECT id, title, 2 FROM adapters WHERE part_num = '$num' 
UNION 
SELECT id, title, 3 FROM components WHERE part_num = '$num'";

これをテーブルフィールドに採用する必要がありますが、このロジックを使用すると、3番目の列(私の例では)によって、コネクタ、アダプタ、またはコンポーネントが見つかったかどうかを確認し、適切なリンクを生成するか、他のアクションを実行できる配列が得られます。このデータで。

もう1つの方法は、1つのデータベース要求で複数の結果を返すマルチクエリを作成することです。それを使用するいくつかの方法があります-mysqli(http://lt.php.net/manual/en/mysqli.multi-query.php)またはいくつかのAdodbまたはPDOライブラリを使用します。

それがお役に立てば幸いです。

于 2012-04-27T22:09:40.077 に答える
0

UNIONを使用するには、3つのレコードセットに同じ数の列が必要であるため、各テーブルから必要な列を指定する必要があります。そこから、3つのクエリのそれぞれからのデータを含む単一の結果セットが得られます。

于 2012-04-27T21:56:32.713 に答える