像条件:为什么'%,x,'不起作用,但'%,x,%'有效

时间:2013-12-12 22:37:18

标签: mysql sql

我有一张名为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

3 个答案:

答案 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

此外,您应该有一个单独的表,每个类别有一行。使用适当的关系数据结构,这样的查询会更容易,更有效。