我在 MySQL 数据库中有一个供应商目录表,它有一个关联的供应商映射表。此表针对单个供应商映射了以下标准:
- 服务。
- 特产
- 标准
仅作为背景信息,其中每一个的值都存储在 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 maps 用于指示被映射的实体类型,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 的标准的所有供应商。但是它只返回一个空结果集,即使我知道至少有一个供应商定义了这些. 它似乎与复合 AND 子句有关,但无法弄清楚是什么。
如果有人有任何想法,将不胜感激?