mysql中的find_in_set字符串查找函数解析

文 / @WordPress主题

MySQL中的find_in_set字符串查找函数解析

在需求系统中,有些平台需要卖家审核订单或退货单,而有些则不需要。为了满足客户需求,我们需要在系统中设置订单或退货单的流程节点,并根据系统下的员工角色进行分发,从而将订单指定给个人而不是全公司员工都可以处理。在实现过程中,我们需要将员工的ID存储在对应节点的待处理人字段中,多个人处理时用逗号分隔保存。因此,在查询订单的方法上,我们需要进行相应的修改,以便每个人只能看到自己可处理的订单。这就需要用到MySQL中的find_in_set字符串查找函数。

1.介绍

MySQL提供了一个名为FIND_IN_SET()的内置字符串函数,允许您在逗号分隔的字符串列表中查找指定字符串的位置。

2.语法

FIND_IN_SET(needle,haystack)

FIND_IN_SET()函数接受两个参数:needle是要查找的字符串。haystack是要搜索的逗号分隔的字符串列表。FIND_IN_SET()函数根据参数的值返回一个整数或一个NULL值:如果needle或haystack为NULL,则函数返回NULL值。如果needle不在haystack中,或者haystack是空字符串,则返回零。如果needle在haystack中,则返回一个正整数。

3.实战

下面是查询编号为8910的员工可处理的待业务审核的订单SQL:

SELECT t.id_,t.order_sn,t.create_time,t.business_employee_ids,cus.customer_title
FROM wms_orders t
LEFT JOIN wms_customer cus ON cus.id=t.buyer_id
WHERE t.order_status!=100
AND t.comp_id=8815
AND FIND_IN_SET('8910',t.business_employee_ids)
AND t.order_status=14
AND (t.parent_order_sn IS NULL OR t.parent_order_sn='')
ORDER BY t.id DESC

上述SQL在一个员工登陆系统,并根据其ID查找出其可处理的待业务审核订单。其中,business_employee_ids字段保存有逗号分隔的员工ID列表。通过find_in_set函数查询该字段中是否存在员工的ID,从而筛选出该员工可处理的订单。

如果我们将上述SQL中的员工ID改为8912,则其结果应该不包含id为6594,6523,6373的订单。通过查询验证,会发现结果确实不包含这三条订单,说明使用此函数可行。

插曲

前两天,有个同事在群里发了个截图,问了个问题,如下:

简单描述下:图片地址那一列存的是我们的旧数据中心的地址,而现在新数据中心上线了,所以需要统一替换成新的地址获取图片。

此时,我就想到之前用到过MySQL中的REPLACE()函数,可以将字符串替换。因此,我们可以通过下面的update语句实现相应功能:

UPDATE wms_platform_wear_brand
SET brand_img=REPLACE(
brand_img,
"http://***/udata/interface/timer/pic/getAttachPic.do?attachId=",
"wms/orderGoods.do?method=getAttachPic&attachId="
)

结语

MySQL中的find_in_set字符串查找函数可以很方便地在逗号分隔的字符串列表中查找指定字符串的位置,十分实用。同时也要注意,只有字符串完全匹配时才会返回正整数,如果只是部分匹配,则会返回0。函数之间的结合使用,可以使我们更加便捷地操作数据库,十分实用。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。