共计 1700 个字符,预计需要花费 5 分钟才能阅读完成。
本篇内容介绍了“mysql 中的 find_in_set 字符串查找函数如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
需求
系统中,不论是订单还是退货单,有的平台使用需要卖家审核,有的则不需要,所以在系统中可以设置订单或退货单的流程节点。
而对于每个流程节点,客户需求是每个节点都要根据系统下的员工的角色去做分发,从而订单指定到个人,而不是整个公司的员工都可以处理。
方案
对于上述场景,我实现的方案是在订单表和退货单表都增加了对应节点待处理人字段,多个人可处理的话,则用, 分隔,保存对应员工的 id 集合。
所以,在查询订单的方法上我们也需要进行对应的修改,每个人只能看到自己可处理的订单。
表内容样例如下:
员工登录系统,我们可以得到其对应的 id,而我们需要将其 id 去对应的字段查找,是否在业务审核,财务审核或发货人的集合中。这时候,SQL 该怎么改?
函数
在改 SQL 之前,我想的是,之前总结过 MYSQL 的很多函数,而对于上面的实现,MYSQL 中肯定会有对应的函数帮助我们实现。果真,被我查到了。
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
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
结果如下:
上面结果截图中,框出的三条订单,id 为 6594,6523,6373 是只有员工编号为 8910 能处理的,我们将上面的 SQL 员工编号改为 8912,则此三条订单应该是不在结果范围内的,从而验证使用此函数查询是否可行。
查询结果如下:
结果证明查询是没有问题的。
插曲
前两天,有个同事在群里发了个截图,问了个问题,如下:
简单描述下:
图片地址那一列存的是我们的旧数据中心的地址,而现在新数据中心上线了,所以需要统一替换成新的地址获取图片。
看完后,我就想到了之前用到过 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 字符串查找函数如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!