我的数据库中有产品表

产品表结构:

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_SETLOCATE之间的区别是什么?在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

10-07 15:46