postgresql多選功能實(shí)現(xiàn)代碼
一、背景介紹
在一所鄉(xiāng)村小學(xué),教師資源緊張,所以會(huì)出現(xiàn)一個(gè)教師身兼多職的情況,既是語(yǔ)文老師又是數(shù)學(xué)老師甚至還是體育老師,這個(gè)系統(tǒng)就是為各個(gè)班級(jí)分配老師,這樣一個(gè)場(chǎng)景實(shí)現(xiàn)
二、代碼實(shí)現(xiàn)及效果
后端country_teacher表數(shù)據(jù)和表結(jié)構(gòu):
前端大概頁(yè)面:
學(xué)科中英文對(duì)照表:前端傳的是帶中括號(hào)的英文,后端數(shù)據(jù)庫(kù)存的是中文
美術(shù) | 語(yǔ)文 | 英語(yǔ) | 數(shù)學(xué) | 體育 |
---|---|---|---|---|
Art | Chinese | English | Math | Sport |
由于前端勾選科目的時(shí)候是多選框,所以會(huì)有順序的問題,比如說用戶先勾選了英語(yǔ)再勾選了美術(shù),那么后端接收到的參數(shù)就是
[English][Art]
所以后端要做一個(gè)排序處理,就是做到不管前端傳的順序是什么,后端最終都是固定的順序,同時(shí)保證在數(shù)據(jù)庫(kù)中教師對(duì)應(yīng)的科目字段順序也是固定的,比如說這個(gè)教師教了英語(yǔ)和美術(shù),那么數(shù)據(jù)庫(kù)里存的就是
美術(shù),英語(yǔ)
因?yàn)槭前凑账鼈兊挠⑽氖鬃帜干蚺判虻?/p>
以下為后端關(guān)鍵代碼,語(yǔ)言為 groovy,和 java 類似:
def main(){ // def job = values['job'] // 入?yún)? def job = "[Chinese][Math][English][Art][Sport]" // 模擬入?yún)? if(job == null || job == ''){ return null } // 轉(zhuǎn)義,添加逗號(hào),分割為數(shù)組 def nJob = job.replaceAll('\\]\\[','\\],\\[') def jobArr = nJob.split(',') // 對(duì)數(shù)組進(jìn)行首字母排序, def sortArr = jobArr.sort() def nArr = [] sortArr.eachWithIndex{ it,i -> { // 刪除掉[] def item = it.replaceAll('\\]','').replaceAll('\\[','') // 從枚舉中獲取中文對(duì)應(yīng)學(xué)科名 nArr[i] = Job[item.toUpperCase()].name } } // 定義模糊查詢條件 def likeJob = '' nArr.each{ likeJob += '%' + it } likeJob = likeJob + "%" // dbUtil是數(shù)據(jù)庫(kù)工具類,自行封裝即可 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 '美術(shù)' case CHINESE: return '語(yǔ)文' case ENGLISH: return '英語(yǔ)' case MATH: return '數(shù)學(xué)' case SPORT: return '體育' } } }
最終效果就是這樣:
用戶勾選了美術(shù),那么下方就顯示所有教美術(shù)的老師,即張三、趙六、唐八三位老師
用戶勾選了英語(yǔ)、體育,那么下方就顯示所有教英語(yǔ)和體育的老師,即王五、唐八兩位老師
到此這篇關(guān)于postgresql多選功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)postgresql多選內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL處理時(shí)間段、時(shí)長(zhǎng)轉(zhuǎn)為秒、分、小時(shí)代碼示例
最近在操作數(shù)據(jù)庫(kù)時(shí),遇到頻繁的時(shí)間操作,每次弄完了就忘了,今天痛定思痛,下定決心對(duì)postgres的時(shí)間操作進(jìn)行一下總結(jié),這篇文章主要給大家介紹了關(guān)于PostgreSQL處理時(shí)間段、時(shí)長(zhǎng)轉(zhuǎn)為秒、分、小時(shí)的相關(guān)資料,需要的朋友可以參考下2023-10-10PostgreSQL 實(shí)現(xiàn)sql放入文件批量執(zhí)行
這篇文章主要介紹了PostgreSQL 實(shí)現(xiàn)sql放入文件批量執(zhí)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02PostgreSQL并行計(jì)算算法及參數(shù)強(qiáng)制并行度設(shè)置方法
這篇文章主要介紹了PostgreSQL 并行計(jì)算算法,參數(shù),強(qiáng)制并行度設(shè)置,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04CentOS 9 Stream 上安裝 PostgreSQL 16的步
在CentOS9Stream上安裝PostgreSQL16,首先添加PostgreSQL官方倉(cāng)庫(kù),然后禁用系統(tǒng)自帶PostgreSQL版本,避免沖突,使用dnf命令安裝PostgreSQL16,并初始化數(shù)據(jù)庫(kù),本文給大家介紹CentOS 9 Stream 上安裝 PostgreSQL 16的步驟,感興趣的朋友一起看看吧2024-11-11如何解決PostgreSQL執(zhí)行語(yǔ)句長(zhǎng)時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行的問題
某日開發(fā)同事上報(bào)一sql性能問題,一條查詢好似一直跑不出結(jié)果,查詢了n小時(shí),還未返回結(jié)果,這篇文章主要給大家介紹了關(guān)于如何解決PostgreSQL執(zhí)行語(yǔ)句長(zhǎng)時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行問題的相關(guān)資料,需要的朋友可以參考下2024-02-02