MySQLデータベースにサプライヤディレクトリテーブルがあり、それにはサプライヤマッピングテーブルが関連付けられています。この表は、個々のサプライヤに対して以下の基準をマップします。MySQLはENUM値に基づいて選択します
- サービス。
- スペシャリティ
- 規格
ちょうど背景情報のためにこれらのそれぞれは、3つの個別対応のテーブルに格納された値を持っています。任意のサプライヤによって提供されることができるすべてのサービスはサービステーブルにリストされ、マッピングテーブルは個々のサプライヤによって提供されるサービスをキャプチャする。サプライヤは複数のサービスを提供することができるため、提供するサービスごとにマッピングを持つことができます。専門店や規格にも同じです。
私が問題に遭遇しているのは、ユーザーが上記の基準のいずれか1つまたは3つすべてでサプライヤーのリストを照会できる検索照会です。たとえば、サービスa、専門b、標準cのサプライヤを検索することができます。彼らは、サービス、専門に複数の値を検索したりすることはできません標準
マイマッピングテーブルには、次のようになりますENTITY_TYPEマップはエンティティタイプを示すために使用される
id int(11) unsigned NOT NULL
supplier_id int(11) unsigned NOT NULL
entity_type enum('KEY_SERVICE','STANDARD','SPECIALITY') NOT NULL
entity_id int(11) NOT NULL
がマッピングされているとENTITY_IDが示します個々のエンティティ。次のように
私のクエリは次のとおりです。
SELECT DISTINCT supplier_mappings.supplier_id, suppliers.company_name
FROM supplier_mappings
JOIN suppliers ON suppliers.id = supplier_mappings.supplier_id
WHERE (supplier_mappings.entity_type = 'KEY_SERVICE' AND supplier_mappings.entity_id = '55')
AND (supplier_mappings.entity_type = 'SPECIALITY' AND supplier_mappings.entity_id = '218')
AND (supplier_mappings.entity_type = 'STANDARD' AND supplier_mappings.entity_id = '15');
ID 55、ID 218を持つ専門性とただし、ID 15と標準それだけで戻ってキーサービスを持っているすべてのサプライヤーを返す必要があります
これらが定義された少なくとも1つのサプライヤがあることはわかっていますが、空の結果セットがあります。それは複合AND節と関係があると思われますが、何が分かりません。
他にもアイデアがありますか?
あなたのテーブルでいくつかのサンプルデータを作成し、それをSQL Fiddleに入れることができますか? – Kermit
http://sqlfiddle.com/#!2/bddae/2を参照してください。以前はSQL Fiddleを使用していなかったようにうれしいです。 キーサービス= 1、専門= 1、標準= 3のサプライヤを検索すると、サプライヤ1とサプライヤ4が返されます。 –