LIKE子句将从一个字符串中选择"2"而不是"12"

dwa*_*dio 3 php mysql sql sql-like

我有一个遗留数据库,其中包含一个字段'User_Defined',其中包含一个字符串,描述每个记录属于哪些项目.项目ID是该字符串中以逗号分隔的数字.例如,记录可能包括:

2
12
22
2,12
2,8,10,12
2,12,20,120,220
Run Code Online (Sandbox Code Playgroud)

当前查询的内容如下:

SELECT tbl_species.Species_ID, 
    tbl_species.Common_Name, 
    tbl_species.User_Defined
FROM tbl_species
WHERE User_Defined LIKE '%2';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,查询当然会返回字符串中任何位置包含"2"的所有记录.我在这里选择2,但它可以是通过PHP变量传入的任何数字.

我的问题是我如何制作查询,以便它只返回包含2而不是12,22,120等的记录?

顺便说一句,我意识到解决这个问题的正确方法是创建一个查找表来处理这种关系,但是如果我能在下次重新设计之前修补它,那就太棒了!

谢谢!

Mar*_*ers 8

尝试使用FIND_IN_SET:

WHERE FIND_IN_SET('2', User_Defined)
Run Code Online (Sandbox Code Playgroud)


Joe*_*lli 6

将一个前导和尾随逗号添加到要搜索的列,然后搜索由逗号括起的值.

...
WHERE CONCAT(',', User_Defined, ',') LIKE '%,2,%';
Run Code Online (Sandbox Code Playgroud)