У меня есть таблица каталогов поставщиков в базе данных MySQL, которая имеет сопоставимую таблицу сопоставлений поставщиков. В этой таблице приведены следующие критерии для отдельного поставщика:Выбор MySQL на основе значений ENUM
- Услуги.
- Специальности
- Стандарты
Только для фоновой информации каждого из них значения хранятся в 3 отдельных соответствующих таблицах. Все услуги, которые могут быть предоставлены любым поставщиком, перечислены в таблице услуг, а таблица сопоставлений отображает услуги, предлагаемые отдельным поставщиком. Поставщик может предоставить более одной услуги, чтобы у них было сопоставление для каждой предоставляемой им услуги. То же самое касается специальностей и стандартов.
Где я столкнулся с трудностями в поисковом запросе, где пользователь может запросить список поставщиков по одному или всем трем из вышеуказанных критериев. Например, они могут искать поставщика с услугой a, специальностью b и стандартом c. Они не могут найти несколько значений на услуги, специальности или стандартный
Мои отображения таблицы выглядит следующим образом:
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_TYPE карты используется для указания типа лица привязывается и 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');
, который должен вернуть всех поставщиков, которые имеют ключевую услугу с идентификатором 55, специальность с идентификатором 218 и стандарт с идентификатором 15. Однако он просто возвращает пустой набор результатов, хотя я знаю, что есть хотя бы один поставщик с указанными. Кажется, что это связано с сложными предложениями AND, но не может понять, что.
Буду признателен, если у кого есть идеи?
Можете ли вы создать некоторые примеры данных с вашими таблицами и поместить их в SQL Fiddle? – Kermit
См. Http://sqlfiddle.com/#!2/bddae/2. Надеюсь, это так, как раньше не использовали SQL Fiddle. Если я ищу поставщика с ключевым сервисом = 1, speciality = 1 и стандартным = 3, он должен вернуть обратно Поставщик 1 и Поставщик 4. –