也许答案很容易,但我找不到正确的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运算符,但我找不到正确的方法来使用它。
答案 0 :(得分:3)
您正在寻找FIND_IN_SET
SELECT *
FROM user
WHERE FIND_IN_SET( '2', action_type )
<强>更新强>
只是提到它,这也是可能的
SELECT *
FROM user
WHERE FIND_IN_SET( 2, action_type )
MySQL会自动转换为char
答案 1 :(得分:2)
在LIKE
子句中包含分隔符:
SELECT *
FROM user
WHERE action_type LIKE '2,%'
OR action_type LIKE '%,2,%'
OR action_type LIKE '%,2'
请注意,我必须使用另外两个LIKE
子句来涵盖项目位于字符串开头或结尾的情况。
答案 2 :(得分:1)
尝试
SELECT * FROM user
WHERE CONCAT( ',', action_type, ',' ) LIKE '%,2,%';