0

リレーションmysqlデータベースのセットアップがあります。1つのクエリで、メイン行から1つのアイテムのすべてのデータと、すべてのリレーショナルデータ(つまり、複数の関連する行)を取得したいと思います。1つのクエリで複数のJOINステートメントを使用する以外に、これを行うための最も簡単で最良の方法は何ですか?

現在使用されているテーブルとクエリは次のとおりです。

リレーショナルデータ

------------------------------------------------------------------------------------------------------------------------------
| value_id | value_site_id | value_field_set_id | value_field_setting_id | value_parent_id | value_parent_type | value_value |
------------------------------------------------------------------------------------------------------------------------------

プライマリテーブル

-----------------------------------------------------------------------
| item_id | item_site_id | item_country_id | item_category_id | etc etc
-----------------------------------------------------------------------

そして、クエリは

SELECT fs.field_variable_name, fs.field_type, fv.value_value, fv.value_parent_id
FROM T_field_values AS fv 
    INNER JOIN T_field_settings AS fs ON fv.value_field_setting_id=fs.field_id
WHERE fv.value_parent_type=:type &&
    fv.value_parent_id=:id;
4

1 に答える 1

2

最善の方法はJOIN、関係ごとに 1 つずつ、複数の句を使用することです。

を恐れないでくださいJOIN。それは標準的な練習です。

もう 1 つの方法は、それぞれにサブクエリを使用することですが、クエリ オプティマイザーはとにかくそれらを JOIN に変換します。

JOINクエリが読みやすくなります。

編集

なるほど、なんらかの形式の EAV テーブルがありますね。あなたのケースは少し複雑で、完全な構造 (T_field_settings が欠落している) といくつかのサンプル データがなければ、正確なクエリを提供しようとはしませんが、ここで私の以前の回答を見てください。自己結合して、EAV テーブルから結果を取得します。それはあなたを正しい軌道に乗せるはずです。

于 2010-05-05T15:41:52.383 に答える