我有一张名为image的表
在该表中有一个名为category
的列,其中包含varchar并存储用逗号分配的图像的所有类别。
category : ,26,25,
此查询正常
SELECT *
FROM `images`
WHERE `confirm` =1
AND `category` LIKE '%,25,%' AND `category` LIKE '%,26,%'
LIMIT 0 , 20
我得到,25,26,
作为类别的所有行
但
为什么这不起作用?
SELECT *
FROM `images`
WHERE `confirm` =1
AND `category` LIKE '%,25,' AND `category` LIKE '%,26,'
LIMIT 0 , 20
答案 0 :(得分:0)
LIKE
匹配整个字符串。 LIKE '%,26,'
匹配,26,
中 end 的字符串,而不是包含的字符串。如果要在任何地方搜索子字符串,则两端都需要%
。
答案 1 :(得分:0)
LIKE
必须与表格中的整个值匹配。如果“25”之后的表格中有内容,则LIKE '%,25,'
将不匹配。
如果您想在mysql
中进行正则表达式匹配,可以使用RLIKE
:
AND category RLIKE ',25,' AND category RLIKE ',26,'
但是如果你使用LIKE
,你必须匹配整个事情。
答案 2 :(得分:0)
like
是完全匹配,而不是字符串中任意内容的匹配。你需要通配符来表示你想要在里面的某个地方进行比赛。
表达式:
AND `category` LIKE '%,25,' AND `category` LIKE '%,26,'
正在查找category
以',25'结尾的情况,并且'同时以',26'结尾。显然,这是不可能的。
您也可以在MySQL中将其标记为:
AND find_in_set(25, category) > 0 and find_in_set(26, category) > 0
此外,您应该有一个单独的表,每个类别有一行。使用适当的关系数据结构,这样的查询会更容易,更有效。