2010-12-17 5 views
0

フィールド 'ID'、 'some_data'を持つサンプルテーブル 'main_table'があります。MySQLとPHP:定義されていない数の結合テーブル内のフィールドによる行の検索

'agg'には 'id'、 'main_table_id'、 'joinee_id'というフィールドがあります。

そして、 'idine'、 'email'というフィールドを持つ最終的なテーブル 'joinee'があります。

テーブル 'main_table'と 'joinee'は、 'agg'によって多数の関係にあります。

私は 'joinee'から 'email'ですべての 'main_table'エントリを検索することができます。左の結合をしないで、 'main_table'。 'id'でグループ化することはできません。 最終結果は、エントリごとに1回、すべての 'main_table'エントリをリストする必要があります。これを想像してみてください - 私は 'main_table'にすべての 'emails'を含む一時的なフィールドの "参加者"を取得したいと思います - これを行う同じクエリでこのフィールドのLIKEの一致を実行します入力した電子メールと関係のある 'main_table'エントリ。

これは可能ですか?

これは非常に大きなクエリの断片に過ぎません。 'main_table'は既に他の5つのテーブルと結合されており、そのフィールドは既にフィルタとして使用されています。つまり、「joinee」の場合は、接続されているエントリの数が異なることがあります。

ありがとうございます。

答えて

1

行結果を1つのセルにまとめることは、リレーショナル・モデルがサポートしていないものであり、ほとんどのDBMSは例外的に悪いです。あなたがその道を歩む場合は、ユーザー定義関数や非標準の構文機能を使用して値を結合するなど、かなりの量のハッキングを取り除く必要があります。

あなたが正しく理解していれば、関連する電子メール行に望ましいエントリがあるエントリをメインテーブルに見つける必要があり、多対多の関係が問題になることが問題です。

  1. email sのあなたが興味を持っているとinner joinaggテーブルの上にそれを見つけたクエリを書く:について、これはどのように

    。これにより、関連するmain_table_idが表示されます。ダブルスを削除するにはdistinctまたはgroup byを使用してください。

  2. 1からのクエリをサブクエリとして使用し、WHERE main_table.id IN (/* subquery */)、またはinner joinなどのステップ1のサブクエリに既存のクエリを使用して、今すぐクエリにプラグインします状況に応じて。伝統的にサブクエリはジョインよりも遅くなりますが、構造や実際のデータによっては逆の場合もあります。いくつかの古いDMBSでは、サブクエリ結果を一時テーブルにバッファリングすることが有益であることがわかります。
+0

この応答をありがとう、私はこれをテストし、私の調査結果を報告します! – Swader

+0

私はクエリを完全に書き直すことになったが、これは現在のクエリを処理するための適切な答えでした。ありがとうございました! – Swader

関連する問題