2012-02-27 2 views
0

私の現在のプロジェクトでは、6つのテーブルを検索できます。検索ロジックが6つ以上の関連テーブルにアクセスするには

テーブルは、次のとおり A、B、C、D、E、F

すべてのテーブルがリスト内の別のテーブルを介して相互に関連しています。

など。 A-> USER-> PHONENUMBER Phonenumber->国等と同様B B-> A-> C C-> F F-> D

searchmask /形成ユーザが提示されますので可能性を残しサーバーに特定のパラメーターのみを送信するために開くと、ユーザーが通過するパラメーターに関係なく、検索結果Rを検索する必要があります。

この場合、パラメータは上記の表のいずれかの列の値です。 Phonenumber-> Provider = Verizonという意味は、プロバイダ= Verizonのすべてのエントリが必要だということです。

実際の問題は、特定のテーブルで検索するのではなく、特定のテーブルで検索した結果から正しい結果を検索していることです。

私に説明しましょう:ここでの結果は、現在検索しているテーブルのテーブルオブジェクトではありません。

結果は常にAとB 例の要件に少なくとも1つのエントリを持っている必要があり、同じオブジェクトの結果でなければなりません: A =ユーザーが Bが存在するすべてのテーブルが関係を持っているので=彼はPHONENUMBER

を持っていますお互いに直接的または間接的に、関連するテーブルをids/keys/constraintsを介してProvider = VerizonおよびJOINの行を検索することによってのみ、AまたはBの列を検索せずに結果にアクセスできます。

現在、複数のクエリを実行しています。 まず、パラメータの種類を確認します。 「A列からC列ですか」 はい、A、B、またはCで直接SELECTを実行し、結果をResultとして取得します。

、はい、それからEにSELECTを行う 「彼らはEから列です」(PHPで)結果としてE.

からC_IDとC上の別のSELECTその後、私はいつも/オブジェクトを持つようにしたいですA.value1、B.value1を含む配列 私はC、D、E、またはFについての情報は一切欲しません。 A.value1とB.value1からなるResultを取得したいのは、 1つまたは複数の表の列、たとえばプロバイダ= Verizon AND国=中国AND OnVaccation = True

私は複雑です。

+0

テーブルA〜Fのテーブルデザインを提供できる場合は、現在使用しているサンプルクエリと一緒にどのテーブルにどのフィールドを結合するかを詳しく説明すると、より役に立つ応答を得ることができます。基本的にINNER JOIN/LEFT JOIN /サブクエリロジックが問題を単純化するように思えますが、あなたはあまりにも疑問に思っています。 –

答えて

1

だと思いますが、Sphinx Search Enginehttp://sphinxsearch.com/です。検索インデックスの構築に使用するSQLクエリを設定する必要があります。この後PHPから検索を実行するための簡単なAPIを使用できます。

+0

これはオプションではない場合は? –

+0

私のプロジェクトの1つでは、国、郡、市、郵便番号のオートコンプリート機能が必要です。このために、 'title'(インデックス付き)、' city_id'、 'county_id'、' country_id'、 'postcode_id'というフィールドを持つ別のテーブルを作成しました。ですから、1つのクエリで 'UNION'や' JOIN'ではなく、4つではなく1つのLIKEで簡単なSELECTクエリを実行するだけです。私がいくつかのエンティティ(都市、国、郡または郵便番号)を更新または追加するとき、私はオートコンプリートのためにテーブルの値を更新/挿入するだけです。しかし、これはスフィンクスの作品のようなものです。 –

関連する問題