首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >find_in_set与定位的区别

问find_in_set与定位的区别
EN

Stack Overflow用户
提问于 2016-11-14 05:27:57
回答 2查看 1.6K关注 0票数 6

我的数据库中有产品表。

产品表结构:

代码语言:javascript
复制
product_id     |     testid
------------------------------------
   1                     11,12,13
   2                     2,4

下面是我的FIND_IN_SET 查询:

代码语言:javascript
复制
SELECT product_id FROM product
WHERE FIND_IN_SET(3, testid) > 0;

输出

代码语言:javascript
复制
0

下面是我的LOCATE 查询:

代码语言:javascript
复制
 SELECT product_id FROM product
    WHERE LOCATE(3, testid) > 0;

输出

代码语言:javascript
复制
1

我的问题

FIND_IN_SET和LOCATE的区别是什么?在column中找到id的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-14 05:45:02

LOCATE()函数与FIND_IN_SET()函数的区别

当对整数使用LOCATE()函数时,假设需要从LOCATE()返回1,如果整数3位于集合1,2,3,4,5,..中,则可以编写以下MySQL命令:

代码语言:javascript
复制
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,但是如果我们编写下面的命令,看看发生了什么

代码语言:javascript
复制
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)

上面的3在给定的集合中不以数字3(3)的形式出现,尽管LOCATE()返回1。为了避免这种情况,可以使用FIND_IN_SET()函数。下面的例子如下:

代码语言:javascript
复制
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)

因此,for ()函数非常适合字符串,但不太适合整数。

示例、学分和更多信息--您可以找到这里

因此,在您的示例中,FIND_IN_SET返回0,因为给定集合中没有3,但是LOCATE()返回1,它将给定的集合视为字符串,而不是逗号分隔的值,以及数字13中的3。

票数 3
EN

Stack Overflow用户

发布于 2016-11-14 06:02:58

用简单的技术术语( PHP术语)来说,find_in_set就像PHP的子字符串函数。它将接受一个子字符串和一个字符串作为参数,如果在字符串中找到子字符串,则返回1。如果找不到子字符串,它将返回0。

相反,LOCATE()返回字符串中字符串第一次出现的位置。它接受一个子字符串和一个字符串作为参数。

我认为在您的用例中,应该使用find_in_set。因为这就是那个。如果在一行中找到3,find_in_set将返回1,其中as定位将首先出现在字符串中,即使它发现31或300作为第一个元素。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40582377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档