FIND_IN_SET() 的语法如下:
FIND_IN_SET(str, strlist)
- str:要查找的字符串
- strlist:要在其中查找的字符串列表
这个函数会在 strlist 中查找 str,如果找到则返回其位置,否则返回 0。所以,可以这样查询:
SELECT field
FROM table
WHERE FIND_IN_SET(?, field) > 0
其中 ? 是一个占位符,我们可以在执行查询语句时传递要判断的字符串。例如,如果我们有 products 表:
+----+--------------------+
| id | category_ids |
+----+--------------------+
| 1 | 1,3,5 |
| 2 | 2,3,4 |
| 3 | 1,2 |
+----+--------------------+
category_ids 字段包含逗号分割的产品分类ID。我们可以这样查询category_ids中包含2的产品:
SELECT * FROM products
WHERE FIND_IN_SET(2, category_ids) > 0
结果:
+----+--------------------+
| id | category_ids |
+----+--------------------+
| 2 | 2,3,4 |
| 3 | 1,2 |
+----+--------------------+
所以使用 FIND_IN_SET() 可以比较方便地在一个逗号分割的字符串字段中判断是否包含指定的字符串。