这是我的数据
385_white 99 swarovski 12 black;blue
386_white 99 swarovski 12 black;blue;green
387_white 99 swarovski 12 yellow;green
389_white 99 swarovski 12 white;silver
385_white 99 swarovski 12 silver
这是一个示例查询
SELECT * FROM `products` WHERE `category` LIKE 'swarovski' AND `colours` LIKE 'silver'
返回的结果为空。如果用户是黑色的,那么它应该返回第一个记录。我无法编辑color;color;color
格式。这是当时的费用。
答案 0 :(得分:5)
像这样的非规范化架构的惩罚是你必须对查询做更多的工作以确保准确匹配:
SELECT *
FROM `products`
WHERE `category` = 'swarovski'
AND (
`colours` = 'silver'
OR `colours` LIKE 'silver;%'
OR `colours` LIKE '%;silver;%'
OR `colours` LIKE '%;silver'
)
答案 1 :(得分:1)
我更喜欢做一次比较:
SELECT *
FROM `products`
WHERE `category` = 'swarovski' and
concat(';', `colours`, ';') like ';silver;'
也就是说,将分隔符添加到列的开头和结尾,然后执行单个like
。