postgresql多选功能实现

news2024/11/15 4:47:08

一、背景介绍

在一所乡村小学,教师资源紧张,所以会出现一个教师身兼多职的情况,既是语文老师又是数学老师甚至还是体育老师,这个系统就是为各个班级分配老师,这样一个场景实现

二、代码实现及效果

后端country_teacher表数据和表结构:

在这里插入图片描述
前端大概页面:
初始页面
学科中英文对照表:前端传的是带中括号的英文,后端数据库存的是中文

美术语文英语数学体育
ArtChineseEnglishMathSport

由于前端勾选科目的时候是多选框,所以会有顺序的问题,比如说用户先勾选了英语再勾选了美术,那么后端接收到的参数就是

[English][Art]

所以后端要做一个排序处理,就是做到不管前端传的顺序是什么,后端最终都是固定的顺序,同时保证在数据库中教师对应的科目字段顺序也是固定的,比如说这个教师教了英语和美术,那么数据库里存的就是

美术,英语

因为是按照它们的英文首字母升序排序的

以下为后端关键代码,语言为 groovy,和 java 类似:

def main(){
    // def job = values['job']  // 入参
    def job = "[Chinese][Math][English][Art][Sport]" // 模拟入参
    if(job == null || job == ''){
        return null
    }
    // 转义,添加逗号,分割为数组
    def nJob = job.replaceAll('\\]\\[','\\],\\[')
    def jobArr = nJob.split(',')
    // 对数组进行首字母排序,
    def sortArr = jobArr.sort()
    def nArr = []
    sortArr.eachWithIndex{
         it,i -> {
             // 删除掉[]
             def item = it.replaceAll('\\]','').replaceAll('\\[','')
             // 从枚举中获取中文对应学科名
             nArr[i] = Job[item.toUpperCase()].name
         }
    }
    // 定义模糊查询条件
    def likeJob = ''
    nArr.each{
        likeJob += '%' + it 
    }
    likeJob = likeJob + "%"
    // dbUtil是数据库工具类,自行封装即可
    return dbUtil.findBySql("select name,subject,id,username from country_teacher where deleted = 0"+
    " and subject like ('$likeJob')") 
}
 
enum Job {
    ART, CHINESE, ENGLISH, MATH, SPORT
 	
    String getName() {
        switch (this) {
            case ART: return '美术'
            case CHINESE: return '语文'
            case ENGLISH: return '英语'
            case MATH: return '数学'
            case SPORT: return '体育'
        }
    }
}

最终效果就是这样:
用户勾选了美术,那么下方就显示所有教美术的老师,即张三、赵六、唐八三位老师
在这里插入图片描述
用户勾选了英语、体育,那么下方就显示所有教英语和体育的老师,即王五、唐八两位老师
在这里插入图片描述

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

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

相关文章

拥有超小型领先工艺射频微波电子元器件厂商兆讯授权世强硬创代理

射频前端芯片在模拟芯片中,属于进入门槛较高、设计难度较大的细分领域,由于国内射频前端芯片行业起步较晚,其市场份额主要被外企所占据,而在国产化浪潮的推动下,上游厂商的射频前端产品及技术逐渐具备领先的竞争优势。…

搜维尔科技:「工业仿真」煤炭矿井模拟仿真救援项目实施

煤炭矿井模拟救援系统满足煤矿企业在紧急避险应急演练方面的实际需要,在不耽误井下正常生产的情况下,高效率、低成本地实现对本矿区入井人员进行避灾演练培训,并学会正确的避灾自救互救方法。并可在本系统中直观的看到人员定位系统、监控系统…

MySQL进阶45讲【35】什么时候会使用内部临时表?

1 前言 在MySQL进阶45讲【15】“order by“是怎么工作的?和MySQL进阶45讲【32】到底可不可以使用join?文章中,分别介绍了sort buffer、内存临时表和join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助SQL语…

qt学习第三天,qt设计师的第一个简单案例

3月25,应用qt设计师,手动设计界面形状 ​ 如何启动qt设计师,找到对应的安装地点,对应你自己安装的pyside6或其他qt的安装路径来找 ​ 应用qt设计师的优点是不用敲代码然后慢慢调节框框大小,位置等、可以直接修改…

2015年认证杯SPSSPRO杯数学建模C题(第一阶段)荒漠区动植物关系的研究全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 C题 荒漠区动植物关系的研究 原题再现: 环境与发展是当今世界所普遍关注的重大问题, 随着全球与区域经济的迅猛发展, 人类也正以前所未有的规模和强度影响着环境、改变着环境, 使全球的生命支持系统受到了严重创伤, 出现了全球变暖…

机器学习的步骤

机器学习项目的成功实施依赖于一系列定义良好的步骤。 1. 定义问题 问题理解:首先要明确机器学习能够解决的问题。这包括对业务需求的理解,以及如何通过数据驱动的方式来解决这些需求。目标设定:明确项目的目标,包括预期的输出、…

网络: 套接字

套接字: 在网络上进行进程间通信 网络字节序与主机字节序的转化 sockaddr sockaddr struct sockaddr {sa_family_t sa_family; // 地址族char sa_data[14]; // 地址数据,具体内容与地址族相关 };sockaddr_in :主要是地址类型, 端口号, IP地址. 基于IPv4编程…

openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint

文章目录 openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint251.1 功能描述251.2 语法格式251.3 参数说明251.4 建议251.5 示例 openGauss学习笔记-251 openGauss性能调优-使用Plan Hint进行调优-行数的Hint 251.1 功能描述 指明中间结果集的大小&a…

初识C++(三)构造函数和析构函数

目录 一、构造函数: 1.构造函数的概念: 2.构造函数的特性: 3.构造函数的形式: 4.为什么要引出构造函数这一概念 5.默认构造函数包括: 6.对默认生成的构造函数不处理内置类型的成员这事的解决办法: …

Adobe Illustrator和Photoshop哪个难学?另一款好用设计软件上位!

当设计开始时,几乎没有人不知道。 Adobe 公司的两大设计软件:Adobe Illustrator 和 Photoshop。虽然 Adobe Illustrator和 Photoshop 很有名,有一定设计经验的设计师在前期探索使用后可以对 Adobe Illustrator和 Photoshop 的使用差异有一个大…

拓展 Amazon S3 技术边界: Amazon S3 Express One Zone 的创新之路

自 Amazon S3 服务推出以来,一直是全球各行各业数百万客户钟爱的云存储服务。然而,随着新兴用例的不断涌现,传统存储方式面临性能瓶颈,尤其是对于对延迟极为敏感的应用程序。为前不久展开的亚马逊云科技 re:Invent 2023 大会上发布…

AI:154-利用机器学习进行电力系统故障检测与预测

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.利用机器学习进行电力系统故障检测…

自增不再简单:深入探索MySQL自增ID的持久化之道

概述 MySQL中的自增特性估计大家或多或少都是用过。一张表中只能由一个自增字段,通常我们会把它设置为主键,但是随着大家系统越来越分布式,为了一些性能和可扩展性问题,大家目前选择更多的都是分布式ID(雪花算法、UUI…

Nextcloud激活被锁用户

Nextcloud激活用户 如果docker下没有安装sudo 和 vim执行下面命令,安装了则跳过 #进入docker内部 #更新apt-get apt-get update #安装sudo apt-get install sudo #安装vim apt-get install vim 修改下面文件内容,否则执行occ命令可能报错 进入上面查询…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…

搭建 canal 监控mysql数据到RabbitMQ

项目需求: 使用canal监控mysql某个库某个表,或者多个库,多个表---- update/inster/create 操作, 系统版本mysql版本java版本canal版本rabbitMQ版本Rocky 9.2MySQL 8.0.26openjdk 11.0.221.1.6rabbitmq-server 3.12.4 mysql 配置…

JMeter元件作用域和执行顺序

JMeter元件作用域和执行顺序 元件的基本介绍基本元件总结 作用域的基本介绍作用域的原则元件执行顺序Jmeter第一个案例: Jmeter三个重要组件(重点)线程组特点线程组分类线程组的属性案例分析 HTTP请求案例一(使用HTTP请求路径来传…

Mysql如何创建存储过程,Navicat如何创建存储过程

一、 通过sql创建和调用存储过程 DELIMITER // CREATE PROCEDURE no_parameters_procedure_name() BEGIN -- 代码块 select 测试无参存储过程; END //DELIMITER ;call no_parameters_procedure_name();二、 通过Navicat界面创建存储过程 格式为 CREATE DEFINERroot% PROCE…

cas学习2:idea里搭建cas项目

在上篇中介绍了cas服务在tomcat中怎么启动的及某j集成cas,这篇讲下idea怎么集成cas成一个项目,为后续的定制化开发做好铺垫。 1.下载CAS 模板 Overlay Template,我这里使用 Apereo CAS 5.3 版本,JDK需要1.8 地址:Git…

目前国内体验最佳的AI问答助手:kimi.ai

文章目录 简介图片理解长文档解析 简介 kimi.ai是国内初创AI公司月之暗面推出的一款AI助手,终于不再是四字成语拼凑出来的了。这是一个非常存粹的文本分析和对话工具,没有那些东拼西凑花里胡哨的AIGC功能,实测表明,这种聚焦是对的…