4

也许答案很简单,但我找不到正确的 MySQL 查询来做我想做的事。

我有表用户

| id_user |  name   | action_type |
+---------------------------------+
|    1    | joshua  |  1,13,12,40 |
|    2    | joshua  |  2,8        |

我只想选择列中有确切数字的action_type行。

action_type以 TEXT 形式存储在 MySQL 中。

我试过这个:

SELECT * FROM user WHERE action_type LIKE '%2%'

但它选择了 12 行,这不是我想要的:(

也许使用 IN 运算符是可能的,但我找不到正确的方法来使用它。

4

3 回答 3

3

你正在寻找FIND_IN_SET

SELECT *
FROM user
WHERE FIND_IN_SET( '2', action_type )

SQL 小提琴演示

更新

顺便提一下,这也是可以的

SELECT *
FROM user
WHERE FIND_IN_SET( 2, action_type )

MySQL 将自动转换为 char

于 2012-12-18T08:01:41.460 回答
2

LIKE在您的子句中包含分隔符:

SELECT *
FROM   user
WHERE  action_type LIKE '2,%'
        OR action_type LIKE '%,2,%'
        OR action_type LIKE '%,2'

请注意,我必须使用两个附加LIKE子句来涵盖项目位于字符串开头或结尾的情况。

于 2012-12-18T07:52:41.030 回答
1

尝试

SELECT * FROM user
WHERE CONCAT( ',', action_type, ',' ) LIKE '%,2,%';
  • 鲁福爵士的正确语法
于 2012-12-18T07:56:11.803 回答