我有2个SQL表:
attributesKey
ID -------------名称
ç--------------松脆
取值--------------软
ř--------------圆
→--------------龙
产生
项---------属性
苹果-------- C,R
橙------ S,R
Bananna ---- L,S
胡萝卜------- L,C
这是我所拥有的问题的简化;但是,我认为应该突出问题。
用户输入他们正在寻找的属性(即Crunchy),我应该显示具有Key值“C”的产品(即“Apple,Carrot”)。
~SELECT语句的伪代码〜
SELECT * FROM产生AS p WHERE(attributesKey.name =“Crunchy”)AND(p.attributes LIKE attributesKey.id)
我希望这是有道理的。我一直在看它,它只是在屏幕上变成一组随机的形状。
由于
答案 0 :(得分:0)
您可以使用FIND_IN_SET(str,strlist)之类的:
SELECT * FROM produce AS p WHERE FIND_IN_SET('C', attributes)
您还可以使用AND
或OR
等逻辑运算符。
但更好的解决方案是创建第三个能够代表两者之间联系的能力。 (如果你的表有数字键,最简单的方法)
produce_attributes (produce_id, attributes_id)
和...
SELECT *
FROM produce AS p
LEFT JOIN produce_attributes AS pa ON pa.produce_id = p.id
LEFT JOIN attributesKey AS ak ON ak.id = pa.attributes_id
WHERE ak.name = 'Crunchy'
修改强>
您的attributesKey
被称为 dictinary表,因为它只会将代码解析为值。而且你在attributesKey和produce之间有多对多的关系。多对多关系由关系数据库管理中的连接表表示(或者至少这是它的最常见表示)。
所以我最推荐你使用数字键和第三张表。
答案 1 :(得分:0)
尝试以下查询 -
SELECT * FROM produce p WHERE p.attributes LIKE '%(SELECT a.id from attributesKey a where a.name="Crunchy")%';