mysql自定义多选排序_前端框架(二)DIV多选复选框框的封装和MySql数据库存取...
圖可以包含的寓意和含義是文字不能比擬的,先有一個(gè)效果圖你也就知道這篇文章的主要內(nèi)容是關(guān)于什么問題的,省去了一大堆文字的累述,看下面這張圖:
這個(gè)需求就是要實(shí)現(xiàn)某個(gè)人具有另外一種特性,具有多對(duì)多關(guān)系,比如某個(gè)人既喜歡運(yùn)動(dòng)、有喜歡上網(wǎng)等等,這樣類似的需求在幾乎在每個(gè)系統(tǒng)里面都有設(shè)計(jì),而且很多框架都實(shí)現(xiàn)了這樣的功能,如果讓自己去實(shí)現(xiàn)就需要自己從建立表、邏輯、以及界面JS都需要自己手動(dòng)去寫,下面是說下我的設(shè)計(jì)思路。
設(shè)計(jì)思路
將多個(gè)checkbox放到一個(gè)div元素中,利用jquery的函數(shù)進(jìn)div和checkbox進(jìn)行控制選取,取值和賦值可以寫一個(gè)循環(huán)既可以完成,至于表單提交既可以利用form標(biāo)簽調(diào)教,也可以利用jquery的ajax方式提交,在對(duì)用戶體驗(yàn)度要求高的系統(tǒng)中最好使用ajax方式提交,這是界面的設(shè)計(jì)部門,另外還有數(shù)據(jù)庫表的建立,我在做數(shù)據(jù)庫表時(shí)覺得很簡單但也遇到了一些問題。
數(shù)據(jù)庫需要建立一張關(guān)系表來存儲(chǔ)多對(duì)多關(guān)系,大家都知道到,需要注意的是在這張關(guān)系表里面怎么存儲(chǔ),即多個(gè)復(fù)選框的ID是存儲(chǔ)在一個(gè)字段里面還是一個(gè)ID一條記錄呢,這兩種方式都可以實(shí)現(xiàn);如果存儲(chǔ)在一個(gè)字段里面就需要把處理這個(gè)字段的邏輯寫在java類里面,我在做表單時(shí)從表單界面直接到數(shù)據(jù)庫SQL語句,中間邏輯已經(jīng)封裝不可以修改,因此只能把IDS存在一個(gè)字段里面,感覺這種方式實(shí)現(xiàn)也挺快,減少了邏輯。
如下有兩張表fcs_checkitem、fcs_useritem,fcs_useritem為關(guān)系表它的itemids字段保存了fcs_checkitem表的itemid數(shù)組,想利用下面嵌套語句查詢:
SELECT * FROM fcs_checkitem
WHERE itemid IN
(
SELECT itemids FROM fcs_useritem
WHERE userid='00000075'
)
經(jīng)測試這樣寫并不能查詢出結(jié)果,因?yàn)槔锩媲短椎牟樵兎祷氐慕Y(jié)果是一個(gè)逗號(hào)隔開的字符串?dāng)?shù)據(jù)(001,002,,003),如果手動(dòng)寫一個(gè)這樣的數(shù)據(jù)是可以查詢出來的,但是這樣動(dòng)態(tài)的方式是查不出來的,上網(wǎng)查發(fā)現(xiàn)mysql是不支持這樣動(dòng)態(tài)查詢的,發(fā)現(xiàn)有另一種思路實(shí)現(xiàn)這種關(guān)鍵字 “IN” 的功能。
SELECT group_concat(b.itemname) as itemnames
FROM fcs_useritem a, fcs_checkitem b
WHERE CONCAT(CONCAT(',',a.checkid),',')
LIKE CONCAT(CONCAT('%,',b.itemid),',%')
AND a.userid=':{$urlParam("formid")}:'
上面利用了concat()以及group_concat()這兩個(gè)函數(shù),它原理是可以用幾個(gè)字理解:用LIKE 實(shí)現(xiàn)IN的功能。
這樣的例如有兩張表A和表B,A表的一個(gè)字段ids是B表字段id的數(shù)組,那么給B.id兩天加上%,讓A.ids字符數(shù)組兩端加上逗號(hào),拿一個(gè)具體的數(shù)字舉個(gè)例子即是,1,去匹配,1,2,3,這個(gè)字符串,只要找到一個(gè)匹配的就會(huì)返回一條記錄,用這種方式實(shí)現(xiàn)類似于in的查詢。
Concat()函數(shù)
這個(gè)函數(shù)常用語連接多個(gè)字符串,例如
String Str1="世界";
String str2="你好"
Str3=concat(str1,str2);
Str3="世界你好",這個(gè)函數(shù)把這兩個(gè)字符串連接了起來,有時(shí)會(huì)覺得很有用;
Group_concat()函數(shù),看一下效果
這是一個(gè)簡單的查詢結(jié)果,再看一下使用這個(gè)函數(shù)的效果
該函數(shù)實(shí)現(xiàn)了將表中查出的某一列數(shù)據(jù),轉(zhuǎn)換成一個(gè)字符串?dāng)?shù)組,如上圖所示,如果你就是想把查出的某一列轉(zhuǎn)為字符串?dāng)?shù)組會(huì)很有用。
這個(gè)多選可以封裝為一個(gè)顆粒、把公共的東西抽象出來弄成一個(gè)個(gè)的顆粒,把它封裝為一個(gè)控件,這個(gè)控件有自己的函數(shù)獲得checkbox值和賦值等方法,還可以封裝一些樣式等,還在考慮怎么才能把checkbox封裝到div標(biāo)簽中,以后再用到時(shí)只需要引入這個(gè)div標(biāo)簽即可,通過div標(biāo)簽傳參控制多選,這涉及到自定義標(biāo)簽怎么弄,在.NET中可以開發(fā)用戶自定義控件,那么在標(biāo)簽中覺得也是可以開發(fā)自定義標(biāo)簽庫,還有類似于下拉列表框等等,都可以封裝起來。
不知道還有沒有別的思路可以實(shí)現(xiàn)用戶控件、或標(biāo)簽的封裝?開發(fā)自定義標(biāo)簽查了一下好實(shí)現(xiàn),把開發(fā)jar包引入進(jìn)來實(shí)現(xiàn)幾個(gè)接口就可以定義自己的標(biāo)簽庫了,開發(fā)自定義標(biāo)簽庫可以實(shí)現(xiàn)用戶自定義功能,方便頁面上的布局,同時(shí)發(fā)現(xiàn)現(xiàn)在的很多產(chǎn)品有關(guān)界面框架,無論界面多美觀、高端大氣,都是封裝原始的html標(biāo)簽元素,封裝也就意味著可以帶了自己心的特性,如果有特殊需求的時(shí)候可以自己適當(dāng)封裝一下。
方便別人編程、也提高了開發(fā)效率和編碼的靈活性。
原文:http://blog.csdn.net/lilongsheng1125/article/details/32070261
總結(jié)
以上是生活随笔為你收集整理的mysql自定义多选排序_前端框架(二)DIV多选复选框框的封装和MySql数据库存取...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的代码大全_MySql数目字函
- 下一篇: mysql获取当前节点的所有叶子节点_m