1

ワークショップと呼ばれるテーブルと、workshop_parts と呼ばれる別のテーブルがあります。

Workshop_parts の各行には、親ワークショップを参照する親 ID と、そのパーツの他のさまざまなデータが保持されます。

ウェブサイト上のすべてのデータを取得して表示する最も効率的な方法を見つけようとしています。

ワークショップ情報とそのすべての部分を以下にリストしたいと思います。

私が今知っていることでは、すべてのワークショップをループしてから、すべてのパーツをループするネストされたループを作成します。

結合を使用してすべてのデータを一気に取得する方法はありますか、それともネストされたループが最適なソリューションですか?

4

3 に答える 3

2

この SO 投稿に従って、実際の JOIN として実行します。

SQLはFROM行の結合と複数のテーブルを残しましたか?

select ws.name as ws_name, part.name as part_name, part.qty as part_quantity from workshop ws LEFT JOIN workshop_parts parts ON (ws.id = parts.workshop_id);

Left JOIN は、ワークショップ ID が存在する場所に移動しますが、一致するワークショップがないパーツは除外します。

INNER JOIN は、一致するワークショップとパーツのみを取得します (パーツのないワークショップは表示されず、ワークショップのないパーツも表示されません)。

RIGHT JOIN は、ワークショップがなくても、パーツのあるワークショップとその他のパーツのみを取得します。

編集 これについて私が見つけた最良の方法は次のとおりです

于 2013-05-13T03:40:58.193 に答える
1

結合を使用します...次のようになります

select ws.name as ws_name, part.name as part_name, part.qty as part_quantity from workshop ws, workshop_parts parts where (ws.id = parts.workshop_id);
于 2013-05-13T03:38:14.007 に答える
0

ワークショップ ID ごとにプログラムでデータベースを呼び出すため、SQL が適しています。すべてのデータを一度に取得してページに表示することで、データベース呼び出しを減らすことができます。

ここにSQLがあります。

select workshop.id, workshop_parts.*
from workshop
left join workshop_parts
on workshop.id=workshop_parts.workshop_id

お役に立てれば。

于 2013-05-13T03:40:54.590 に答える