mysql 设置的黑名单_在SQL中实现多条件任意组合黑名单的方法
最近的一个项目中,在对故障工单进行自动语音督办的时候,需要在某个时段对某种组合条件下的工单不督办。如在实时督办中,对所有区域告警ID为“FF--1057361341”工单,白天不督办,但夜间需督办;在受理督办中,对某个指定区域告警ID为“207-121-00-800316”的,白天督办,夜间无需督办。
为了保障督办的及时性,我们采用的是任务驱动的方式。即生成任务,根据任务去判定采用什么督办模式。如下图:
那么为了实现某个时段对某种组合条件下的工单不督办的功能,我们只需要在生成督办任务后,逐个判断是否满足条件A,B,C,如下图。但每次增加一个条件的时候,我们都必须修改和发布系统。同时判断条件很多时,效率极其低下。
于是,我们想到了“黑名单”,把某种特定的条件组合,设计成“黑名单”。我们只需要判断此工单是否在黑名单中,如果在,则不督办,如下图。但对于不同的组合条件,需要设计不同的黑名单表,且没增加一种条件时,需要修改和发布系统。
那么,怎么才能实现一个黑名单,能够满足不同组合条件的变化情况。我们设计以下黑名单表BlackList。
字段
类型
说明
F_Id
int
自动编号
F_Area
Varchar(50)
区域名称
F_ClassID
int
督办类别ID
F_TimeSlot
Int
督办时间段
F_Mark
Varchar(100)
网管告警ID
F_Grede
Varchar(100)
处理级别
F_Class1
Varchar(100)
一级分类
F_Class2
Varchar(100)
二级分类
F_Class3
Varchar(100)
三级分类
然后,我们提供一个Get_isDoBlackList函数,用于判定此任务工单是否存在于黑名单表中,如果存在0,否则返回1,代码如下:
--创建判断黑名单的函数
create function [MM].[dbo].[Get_isDoBlackList](@Area varchar(50), --区域
@ClassID int, --督办类型编号
@TimeSlot int, --执行时间段,白天(-23点)为1,夜间为2;
@Grade varchar(50), --工单级别
@Mark varchar(50), --告警ID
@Class1 varchar(50), --一级分类
@Class2 varchar(50), --二级分类
@Class3 varchar(50) --三级分类
)/*功能描述:查询当前需要督办的任务工单是否在黑名单表BlackList中有配置,
如果有就返回,否则返回
创建者:ldh
创建时间:2016/6/30*/
returns int
as
begin
declare @rt int
if not exists( select F_mark fromdbo.BlackListwhere (F_Area=@Area or F_Area='all') and (F_ClassID=@ClassID or F_ClassID=0) and (F_Grade=@Grade or F_Grade='all')and (F_MARk=@Mark or F_MARk='all') and F_TimeSlot=@TimeSlot and (F_Class1=@Class1 or F_Class1='all')and (F_Class2=@Class2 or F_Class2='all') and (F_Class3=@Class3 or F_Class3='all') )begin
set @rt= 1
end
else
begin
set @rt= 0
end
return @rt
end
View Code
这样,我们只需要设置BlackList中的记录,根据记录中的值来判定是否启用此字段为条件。对于int型字段,当设置为0时,表示适应所有条件,即忽略此判定条件,否则,设置到此字段的值作为判断条件。对于Varchar类型的字段,all表示适应所有规则,即忽略此判定条件,否则,设置到此字段的值作为判断条件。当然,前提是我们知道不会出现0和all值。
我么根据以下代码来验证我们的方法和思路:
1)设置黑名单记录
--设置黑名单记录
INSERT INTO [IVR].[dbo].[t_r_EomsBlackList]([F_Area],[F_ClassID],[F_TimeSlot],[F_Grade],[F_Mark],[F_Class1],[F_Class2],[F_Class3])select 'all',2,2,'all','208-069-00-300008','all','all','all'
union
select 'all',2,2,'all','208-121-00-800030','all','all','all'
union
select 'all',2,2,'all','207-121-00-800316','all','all','all'
union
select 'all',1,1,'all','FF--1057361341','all','all','all'
View Code
2)调用方法判定是否为黑名单
if (IVR.dbo.Get_isDoBlackList('11',2,2,'二级督办','207-121-00-800316','a11a','a11a','123')=0)begin
print '是黑名单,需要过滤,不督办'
end
else
begin
print '不是黑名单,无需过滤,督办'
end
*/
View Code
通过这种方法,我们可以实现通过设置一条记录,来增加一种组合条件的判定条件,从而在某个时段对某种组合条件下的工单不督办。
如有更好的方法,欢迎探讨和指导。(不经允许,请勿转载)
mysql 设置的黑名单_在SQL中实现多条件任意组合黑名单的方法相关推荐
- mysql版本链图解_图解 SQL 中各种连接 JOIN
先用文字来捋一下思路,数据库操作中无非就是「增删查改」,其中「 查」用得最多且最复杂,变化多端.查询的时候,我们可以只是单表查询,也可以是多表连接查询,单表查询中的学问也很大,但限于篇幅,本次主要分享 ...
- mysql树状查询优化_解析SQL中树形分层数据的查询优化
在数据查询中,从2008开始SQL Server提供了一个新的数据类型hierarchyid,专门用来操作层次型数据结构. hierarchyid 类型对层次结构树中有关单个节点的信息进行逻辑编码的方 ...
- mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...
关于日期函数TO_TIMESTAMP 拓展: date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是 ...
- 报表下拉框多选查询及一般在sql中添加查询条件
1.sql SELECT * FROM [销量] where 1=1 ${if(len(销售员1) == 2,"","and 销售员 in (" + 销售员1 ...
- excil mysql查询 条件_excel多条件查找 Excel中实现多条件查找的15种方法
excel多条件查找 Excel中实现多条件查找的15种方法,平凡的世界平凡的你,努力学习使我们变得不平凡,今天要介绍的知识是excel多条件查找的相关知识,你准备好学习excel多条件查找 Exce ...
- fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...
外连接(out join) 外连接分为外左连接(left outer join)和外右连接(right outer join) 注释:left outer join 与 left join 等价, 一 ...
- mysql设置token有效期_记住我 token保存到数据库
记住我 token保存到数据库 这里使用jpa+mysql org.springframework.boot spring-boot-starter-data-jpa mysql mysql-conn ...
- mysql 设置数据库只读_如何设置mysql数据库为只读
直奔主题,mysql设置为只读后,无法增删改. 设置命令: mysql>set global read_only=1; #1是只读,0是读写 mysql> show global v ...
- sql组合键设置外键_学习SQL:外键
sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...
最新文章
- win10 anaconda 下pcl库的安装
- MYSQL中如何查看表结构命令_mysql查看表结构命令
- 还在用 Notepad++吗? 盘点五款更好用的文本编辑器
- ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法
- 组态王串口服务器虚拟串口,串口服务器USR-N520连接组态王设置步骤
- 孤读Paper——《FCOS: Fully Convolutional One-Stage Object Detection》
- Java NIO 和 IO的区别
- C语言库函数学习知识
- 小学计算机房荷载,资深暖通设计师总结的常用参数参考值,新手们都说感谢大神支招...
- #1.4股市预测数学的产生原因
- 关于5月份BCH硬分叉,这些你应该知道
- Attention Is All You Need
- win8 android 跑分,Windows 10和win8.1性能跑分测试结果曝光
- OCR目标识别(车辆VIN码识别效果)
- Flutter 热更新功能实现
- 原来自动驾驶离不开OpenStack
- stata foreach循环语句的使用
- SQL视图View的总结和使用
- 根据ip或者自动识别当前用户所在国家、地区、城市
- Pytorch 计算误判率,计算准确率,计算召回率
热门文章
- python 录屏_python实现录制全屏和选择区域录屏功能代码
- uniapp小程序仿抖音切换内容
- PPmoney基于Kubernetes的DevOps实践
- Linux被熊孩子攻破了?
- C#基于联通短信Sgip协议构建短信网关程序.net
- Casbin入选2022 Google编程之夏
- 七牛云融合CDN到底怎么配置?
- c++编程 设置桌面壁纸以及设置壁纸失效的解决办法
- 如何在区块链底层平台和应用场景中搭一个“桥梁”,他们推出了“中间件”
- oracle体育成绩字段,在Excel中利用自定义函数处理体育达标成绩