我在MySQL数据库中有一个供应商目录表,它有一个相关的供应商映射表。该表将以下标准与单个供应商进行映射:
我在搜索查询中遇到困难的地方是,用户可以在上述任意一个或全部三个标准中查询供应商列表。例如,他们可以搜索具有服务a、特长b和标准c的供应商。他们不能在服务、特长或标准上搜索多个值。
我的映射表如下:
- 服务。
- 特长。
- 标准。
我在搜索查询中遇到困难的地方是,用户可以在上述任意一个或全部三个标准中查询供应商列表。例如,他们可以搜索具有服务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子句有关,但无法确定问题所在。
如果有人有任何想法,将不胜感激。