我的数据库中有产品表
产品表结构:
product_id | testid
------------------------------------
1 11,12,13
2 2,4
以下是我的
FIND_IN_SET
查询:SELECT product_id FROM product
WHERE FIND_IN_SET(3, testid) > 0;
输出
0
以下是我的
LOCATE
查询: SELECT product_id FROM product
WHERE LOCATE(3, testid) > 0;
输出
1
我的问题
FIND_IN_SET
和LOCATE
之间的区别是什么?在column
中查找ID的最佳方法是什么 最佳答案
LOCATE()
和FIND_IN_SET()
函数之间的区别
当对整数使用LOCATE()
函数时,假设如果整数3在set LOCATE()
中,则我们需要1从1,2,3,4,5,..
返回,可以编写以下MySQL命令:
mysql> SELECT IF(LOCATE(3,'1,2,3,4,5,6,7,8,9')>0,1,0);
+-----------------------------------------+
| IF(LOCATE(3,'1,2,3,4,5,6,7,8,9')>0,1,0) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+
1 row in set (0.06 sec)
上面的命令正确运行,因为集合包含数字3,但是如果我们编写以下命令,请看发生了什么
mysql> SELECT IF(LOCATE(3,'11,12,13,14,15')>0,1,0);
+--------------------------------------+
| IF(LOCATE(3,'11,12,13,14,15')>0,1,0) |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.02 sec)
尽管
LOCATE()
返回1,但在给定集合中3上方不以数字3(3)表示。为了避免这种情况,可以使用
FIND_IN_SET()
函数。这是下面的示例:mysql> SELECT IF(FIND_IN_SET(3,'11,12,13,4,5,6,7,8,9')>0,1,0);
+-------------------------------------------------+
| IF(FIND_IN_SET(3,'11,12,13,4,5,6,7,8,9')>0,1,0) |
+-------------------------------------------------+
| 0 |
+-------------------------------------------------+
1 row in set (0.05 sec)
因此,LOCATE()函数非常适用于字符串,但不适用于整数。
示例,字幕和更多信息,您可以找到here
因此,在您的示例
FIND_IN_SET
中,由于给定集中没有0
,因此3
返回LOCATE()
,但1
返回3
,它将给定集合视为字符串,而不是逗号分隔的值,并且13
存在于数字ojit_code