MySQL LIKE限制

时间:2011-05-20 17:14:23

标签: php mysql sql-like

基本上我的表格中有一行,它的值有以下格式 - 1,2,3,4,10,11,21,34等。

我正在使用LIKE语句检索值,但由于我将其与%<value>%一起使用,因此在搜索1时,它会返回11,21,1等等。

如何限制它,根据一个返回值?

4 个答案:

答案 0 :(得分:6)

尝试find_in_set()字符串函数:

SELECT ...
FROM ...
WHERE FIND_IN_SET(somevalue, '1,2,3,4,10');

请注意,这是一个纯粹的MySQL功能,如果没有跳过巨大的箍,就无法在其他任何地方使用。

答案 1 :(得分:3)

而不是col LIKE '%<value>%'

col LIKE '%,<value>,%' OR col LIKE '<value>,%' OR col LIKE '%,<value>' OR col LIKE '<value>'

或更好

col REGEXP '(.+,|^)<val>(,.+|$)'

但最好的解决方案是改变您的数据结构!使用SET类型,或多个字段或连接表。

答案 2 :(得分:1)

如果您只想返回特定匹配项,请使用=而不是LIKE。 Like意味着返回部分匹配,不像=只返回特定匹配。如果你只想匹配第一部分,使用%,但11仍然会返回111,但不会返回211.一个常见的错误是使用LIKE作为一切,或删除%%周围的。另外,你真的是说MYSQL数据库中一行的VALUE是1,2,3,4,11,12等吗?如果是这样,为什么要尝试根据其中的数字搜索该值?我认为你会搜索整体的一个子集,例如%3,4,11%等...

答案 3 :(得分:1)

虽然我同意有关更改数据结构的其他答案,但是您遇到的问题可以通过在分隔两侧封装的串行数据字段中存储每个值来轻松解决。

I don't recommend it,但如果您将数据从1,2,3,4,10,11,21,34更改为,1,2,3,4,10,11,21,34,,则会注意到每个值都标有逗号,因此您现在可以搜索{ {1}}