0

部品用と年用の 2 つの MySQL テーブルがあります。スタックオーバーフローでテーブルを作成する方法がわかりません..ヘッダーを作成し続けるので、必要なものを説明するための私の弱い試みです。

表1

id | part_id | years
====================
 0 |    15   | 1945
 1 |    15   | 1946
 2 |    16   | 1944
 3 |    16   | 1947
 4 |    16   | 1948
 5 |    17   | 1953

ご想像のとおり、part_id はパーツ テーブル内のパーツの ID 番号です。これで、年に基づいて個別のパーツ ID を取得できることがわかりました。その部分は簡単です。

SELECT DISTINCT part_id FROM `years` WHERE year BETWEEN 1945 AND 1949 

これは単なる例ですが、それはまさに私が望むように機能します。私に与えます

15 と 16。一度だけ。これは素晴らしいことです。

さて、パーツから情報を取得するために、php でループを実行する必要がありますか? ここに参加する方法がわかりません。

<?php
foreach($item_pulled_from_db as $newid) {
    $query = "SELECT * FROM 'parts' WHERE id = $newid";
} // I know there's more stuff to do in here, just a basic overview for you to look at
?>

上記のコードを実行する必要がありますか? DISTINCT part_id を選択し、MySQL でその ID の別のテーブルからデータを取得する方法はありますか? または、このようなループを実行する必要がありますか?

編集:これが質問をあまり混乱させないことを願っています。私は言葉が苦手なので、プログラミングが好きです。:)

4

3 に答える 3

1

結合を使用します。

SELECT parts.*
FROM parts
JOIN (SELECT DISTINCT part_id
      FROM years
      WHERE year BETWEEN 1945 AND 1949) years
ON parts.id = years.part_id
于 2012-09-20T00:20:25.107 に答える
0

単一のクエリで JOIN を使用してこれを実現できます。試す:

SELECT `parts`.* FROM `parts`
INNER JOIN `years` ON `years`.`part_id` = `parts`.`id`
WHERE `years`.`year` BETWEEN 1945 AND 1949

その単一のクエリを PHP から実行し、結果セットをフェッチします。複数のクエリを使用して得られるものと同じである必要があります。

于 2012-09-20T00:20:57.630 に答える
0

このクエリにより、必要な結果が得られます。

SELECT DISTINCT
    p.*
FROM 
    years y
INNER JOIN
    parts p ON p.id = y.part_id
WHERE 
    y.year BETWEEN 1945 AND 1949
于 2012-09-20T00:21:45.683 に答える