问题如何查找与一列中的值匹配的行(使用 = 运算符),而另一列应该有一个子字符串(使用 find_in_set 或其他子字符串匹配)。
场景:我有三个 mysql 表:
1. 数字:它有数字的详细信息,如 id、name、create-by、created-on、modified-on、status 等。为方便起见,我只提到了两列:
id | name
1 | red green yellow circle
2 | red square in yellow circle
3 | 3D yellow red trapezium
2.属性:它存储不同的属性,每个属性的所有可能的逗号分隔值。
id | term | value
1 | shape | circle,square,rectangle,parallelogram,trapezium
2 | color | red,green,yellow,blue,white,orange
3 | dimension | 1D,2D,3D
3.图形属性映射:它存储图形、属性的映射,并且仅存储适用于该特定图形-属性组合的逗号分隔值。
id | figure_id | attribute_id | value
1 | 1 | 1 | circle
2 | 1 | 2 | red,green,yellow
3 | 2 | 1 | circle,square
4 | 2 | 2 | red,yellow
5 | 3 | 1 | trapezium
6 | 3 | 2 | yellow,red
7 | 3 | 3 | 3D
目标:我想编写一个查询,该查询从figure_attribute_mapping表中返回该属性图映射行中匹配属性值的图ID 。
案例一:搜索方形图形。我的查询:
Select figure_id from figure_attribute_mapping
where (attribute_id = 1 AND find_in_set('square',value)<>0);
预期答案:2 结果:肯定
案例二:搜索红色图形。我的查询:
select figure_id from figure_attribute_mapping
where (attribute_id = 2 AND find_in_set('red',value))
预期答案:1、2、3 结果:肯定
案例三:搜索红色方块图。我的查询:
select figure_id from figure_attribute_mapping
where
(attribute_id = 1 AND find_in_set('square',value)<>0)
AND (attribute_id = 2 AND find_in_set('red',value)<>0)
预期答案:2 结果:否定
案例四:在黄色圆圈图中搜索红色方块。我的查询:
select figure_id from figure_attribute_mapping
where
(
(attribute_id = 1 AND find_in_set('square',value)<>0)
AND (attribute_id = 1 AND find_in_set('circle',value)<>0)
)
AND
(
(attribute_id = 2 AND find_in_set('red',value) <>0)
AND (attribute_id = 2 AND find_in_set('yellow',value)<>0)
)
预期答案:2 结果:否定
当属性类型相似时,我可以找到 figure_id,但当多个属性出现问题时,我找不到 figure_id。
有人可以帮忙创建一个mysql查询吗?