MYSQL查询审批流程最新的一条记录示例

news2024/9/9 5:14:32

首先说下需求
就是我们有一个申请审批流程记录表,用来处理申请的流程审批,要求就是普通用户只能看见自己的审批记录,管理员可以看见所有的审批记录,这里有个问题就是管理员本身也可能是审批人,所以查询的时候就会稍微复杂一点

数据结构如下图表格所示
每一个审批申请对应一个apply_id
serial_no相同的代表是同一层级审批人
approval_status是审核状态

在这里插入图片描述

普通用户查询没什么好说的,我们只需要在业务层判断当前用户不是管理员,那么 user_id 等于当前登录用户ID就可以,这里重点要处理的是管理员查看所有的审批记录问题,因为作为管理员肯定每个申请只需要看到一条,而且看到的这条应该是最新的一条才行

我们先来看下面这个SQL

SELECT *
FROM approval_record ar
WHERE NOT EXISTS (SELECT 1 FROM approval_record ar1 WHERE ar.apply_id = ar1.apply_id AND ar1.create_time > ar.create_time)

看下执行结果

在这里插入图片描述

可以看到能拿到最后一条记录

接下来我们来处理管理员本身也是审批人的问题,这个时候他需要看到的就不是最新的那条记录,而是应该获取自己审批的那条,所以当登录用户是管理员的时候,我们就需要先判断当前申请审批记录里面有没有他的记录,有的话就查自己的,没有的话就查最新的

所以我们可以用下面这个查询,在 WHERE 里面使用 IF 函数

SELECT *
FROM approval_record ar
WHERE IF((SELECT 1 FROM approval_record ar2 WHERE ar2.apply_id = ar.apply_id AND ar2.user_id = '213456' AND ar2. approval_status IS NOT NULL) IS NOT NULL,ar.user_id = '213456', NOT EXISTS (SELECT 1 FROM approval_record ar1 WHERE ar1.apply_id = ar.apply_id AND ar1.approval_status IS NOT NULL AND ar1.id > ar.id) )

查询结果如下
可以看到apply_id为1和2查询的是自己的那条记录,3查询的是最后一条记录,满足要求

在这里插入图片描述

这里因为使用了MYSQL的 IF 函数,但是很多数据库并不支持 IF函数,所以这里还可以调整一下,用 CASE 代替IF就可以了

SELECT *
FROM approval_record ar
WHERE 
(
	CASE 
		WHEN EXISTS (SELECT 1 FROM approval_record ar2 WHERE ar2.apply_id = ar.apply_id AND ar2.user_id = '213456' AND ar2. approval_status IS NOT NULL) 
		THEN ar.user_id = '213456'
    ELSE NOT EXISTS (SELECT 1 FROM approval_record ar1 WHERE ar1.apply_id = ar.apply_id AND ar1.approval_status IS NOT NULL AND ar1.id > ar.id)
	END
)

其实一开始我想的是通过UNION的方式分两次查询然后拼接起来再处理,但是感觉很麻烦,然后我就想那能不能直接在WHERE 后面加 IF 判断来处理,没想到还真的可以,当然实际查询肯定还有其它条件的

下面这个才是我实际业务查询

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1918570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度好文】合作伙伴关系管理自动化:双向共赢新趋势

在当今快速变化的商业环境中,合作伙伴关系已成为企业成功的关键因素之一。为了更高效地管理这些关系,合作伙伴关系管理自动化正逐渐成为行业的新趋势,它不仅简化了管理流程,更促进了双方共赢的局面。 一、传统管理 VS 自动化管理 …

国产化趋势下源代码数据防泄密的信创沙盒的方案分享

随着国产化的大力推进,越来越多的企事业单位在逐步替换Windows、Linux等操作系统的使用。那么什是国产化了?国产化是指在产品或服务中采用国内自主研发的技术和标注,替代过去依赖的他国的产品和服务,国产化又被称之为“信创”&…

09.AOP-尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)

现有代码缺陷 针对带日志功能的实现类,我们发现有如下缺陷: 对核心业务功能有干扰,导致程序员在开发核心业务功能时分散了精力附加功能分散在各个业务功能方法中,不利于统一维护 解决思路 解决核心:解耦。把附加功能从…

华为官方出品:《应用现代化实践指南》电子书,可免费下载

本期云享书库为各位开发者带来了应用现代化方面的技术内容。 在数字化时代,企业面临着前所未有的机遇与挑战。随着技术的飞速发展,特别是云计算、大数据、人工智能(AI)和机器学习(ML)的兴起,正…

中国科学院地理所牛书丽团队《Global Change Biology 》最新成果!

本文首发于“生态学者”微信公众号! 在全球气候变化的背景下,干旱地区的扩张对生态系统的氮循环产生了深远影响。氮同位素(δ15N)的天然丰度,尤其是土壤中的δ15N,是评估陆地生态系统氮循环动态和氮限制的关…

你的数据库真的规范吗?小心这些“潜在风险”!

这个简单的小功能,解决了无数企业最头疼的问题。 分享个比较常见的案例。某个客户,在全国范围有近千万的注册用户,日均交易量数十万笔。企业使用 MySQL 数据库存储核心业务数据,包括用户信息、订单信息、商品信息等。某天&#x…

windows信息收集和提权

目录 手动收集 工具收集 windows本地内核提权 本地提权 根据windows去找需要的exp进行利用 提权后结合mimikatz使用 msf提权 简单提权 生成后门 上线 BypassUAC绕过UAC提权 msf带的bypassuac模块可以尝试提权 Bypassuac提权命令操作 提权成功 ​local_exploi…

c++多态的定义和原理

目录 1、多态的定义和实现 1.多态的构成条件 2.虚函数 3.虚函数的重写(覆盖) 4.虚函数重写的两个例外 5.c11 override和final 6.重载,覆盖(重写)和隐藏(重定义) 2、抽象类 概念 接口继承和实现继承 3、多态的原理 1.虚函数表 2.多态的原理 4、多继承中的虚…

deep learning 环境配置

1 NVIDIA驱动安装 ref link: https://blog.csdn.net/weixin_37926734/article/details/123033286 2 cuda安装 ref link: https://blog.csdn.net/qq_63379469/article/details/123319269 进去网站 https://developer.nvidia.com/cuda-toolkit-archive 选择想要安装的cuda版…

城市智慧公厕-为用户提供最直观的上厕所指引

在智慧城市的发展进程中,城市智慧公厕作为公共服务设施的智能化升级版,正悄然改变着我们日常生活中的一个基本需求——如厕体验。它不仅提升了公共卫生水平,还为城市居民和游客提供了前所未有的便利,成为展现城市文明程度和科技实…

DDR3 (四)

1 DDR3 8倍预取 DDR3相比DDR2外部IO时钟又提高了一倍,因此DDR3外部IO时钟是内核时钟的4倍,再加上双沿采样,因此DDR3可以实现8倍预取 2 DDR3 芯片位宽 DDR3使用8倍预取技术,指的是芯片位宽(DQ数据线位宽&#xff09…

ST7789 linux4.x驱动

文章目录 ST7789 linux4.x驱动设备树配置驱动程序编译驱动测试驱动 ST7789 linux4.x驱动 设备树配置 pinctrl_ecspi2_cs_1: ecspi2_cs_grp-1 {fsl,pins <MX6UL_PAD_CSI_DATA01__GPIO4_IO22 0x40017059>; };pinctrl_ecspi2_1: escpi2grp {fsl,pins <MX6UL_PAD_CSI_…

【开发工具】webStrom2024版-永久使用

1、解压文件 2、安装步骤 先执行unistall-current-user.vbs&#xff0c;确保当前环境变量下没有历史使用记录。再执行install-current-user.vbs。运行的时候&#xff0c;会有第一个弹窗&#xff0c;点击确定&#xff0c;稍微等待一会&#xff0c;会出现 Done 的弹窗&#xff0…

前端最全面试题【最新版本2024-7月】

文章目录 最常见问题javascript篇Javascript的运行机制javascript的数据类型怎样判断变量的类型数据类型转换闭包的优缺点v-if和v-for哪个优先级更高&#xff1f; 如果两个同时出现&#xff0c;应该怎么优化得到更好的性能&#xff1f;HTML5的新特性和CSS3的新特性div 上下居中…

流失人数月度统计教程

文章目录 一、ABC轮线1、数据源&#xff1a;每个月最后一天数据2、填写 "B轮&#xff08;直播间&#xff09;-流失人数(个人数据)" 一、ABC轮线 以B轮直播间数据填写为例 1、数据源&#xff1a;每个月最后一天数据 如7月&#xff0c;即为7月31日 2、填写 “B轮&…

x264 编码器 AArch64 汇编函数模块关系分析

x264 编码器 AArch64 汇编介绍 x264 是一个流行的开源视频编码器,它实现了 H.264/MPEG-4 AVC 标准。x264 项目致力于提供一个高性能、高质量的编码器,支持多种平台和架构。对于 AArch64(即 64 位 ARM 架构),x264 编码器利用该架构的特性来优化编码过程。在 x264 编码器中,…

Wireshark 对 https 请求抓包并展示为明文

文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…

【Linux】进程间通信之System V共享内存

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

凯中精密:下一个正丹吗?

业绩预增超十倍&#xff01; 又一匹A股业绩黑马诞生——凯中精密 近期&#xff0c;凯中精密发布2024年上半年业绩预告&#xff0c;预计净利润增速高达1068%至1402%。 从23年的209.54%到24年Q1惊人的6885.78%&#xff0c;再到24年上半年的十倍增速&#xff0c;这条业绩黑马利润…

HNU-2024操作系统实验-Lab9-Shell

一、 实验目的 理解Shell程序的原理、底层逻辑和Shell依赖的数据结构等 在操作系统内核MiniEuler上实现一个可用的Shell程序 能够根据相关原理编写一条可用的Shell指令 二、 实验过程 首先从底层出发&#xff0c;实现Shell程序 1.在src/include目录下新建prt_shell.h头文…