標籤:資料庫 效率 產品 方式 列表 term 欄位 jquer 效果
圖能夠包括的寓意和含義是文字不能比擬的,先有一個你也就知道這篇文章的主要內容是關於什麼問題的。省去了一大堆文字的累述。看以下這張圖:
這個需求就是要實現某個人具有第二種特性。具有多對多關係。比方某個人既喜歡運動、有喜歡上網等等。這樣類似的需求在差點兒在每一個系統裡面都有設計。並且非常多架構都實現了這種功能,假設讓自己去實現就須要自己從建立表、邏輯、以及介面JS都須要自己手動去寫,以下是說下我的設計思路。
設計思路
將多個checkbox放到一個div元素中。利用jquery的函數進div和checkbox進行控制選取。取值和賦值能夠寫一個迴圈既能夠完畢。至於表單提交既能夠利用form標籤調教。也能夠利用jquery的ajax方式提交。在對使用者體驗度要求高的系統中最好使用ajax方式提交,這是介面的設計部門,另外還有資料庫表的建立,我在做資料庫表時認為非常easy但也遇到了一些問題。
資料庫須要建立一張關係表來儲存多對多關係,大家都知道到,須要注意的是在這張關係表裡面怎麼儲存。即多個複選框的ID是儲存在一個欄位裡面還是一個ID一條記錄呢。這兩種方式都能夠實現;假設儲存在一個欄位裡面就須要把處理這個欄位的邏輯寫在java類裡面,我在做表單時從表單介面直接到資料庫SQL語句,中間邏輯已經封裝不能夠改動,因此僅僅能把IDS存在一個欄位裡面,感覺這樣的方式實現也挺快,降低了邏輯。
例如以下有兩張表fcs_checkitem、fcs_useritem。fcs_useritem為關係表它的itemids欄位儲存了fcs_checkitem表的itemid數組,想利用以下嵌套語句查詢:
SELECT * FROM fcs_checkitemWHERE itemid IN(SELECT itemids FROM fcs_useritemWHERE userid=‘00000075‘)
經測試這樣寫並不能查詢出結果,由於裡面嵌套的查詢返回的結果是一個逗號隔開的字串資料(001,002。,003),假設手動寫一個這種資料是能夠查詢出來的,可是這樣動態方式是查不出來的,上網查發現mysql是不支援這樣動態查詢的,發現有還有一種思路實現這種keyword “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()這兩個函數,它原理是能夠用幾個字理解:用LIKE 實現IN的功能。
這種比如有兩張表A和表B,A表的一個欄位ids是B表欄位id的數組。那麼給B.id兩天加上%,讓A.ids字元數組兩端加上逗號。拿一個詳細的數字舉個範例即是,1,去匹配,1,2,3,這個字串,僅僅要找到一個匹配的就會返回一條記錄。用這種方式實作類別似於in的查詢。
Concat()函數
這個函數經常使用語串連多個字串,比如
String Str1="世界";
String str2="你好"
Str3=concat(str1,str2);
Str3="世界你好",這個函數把這兩個字串串連了起來,有時會認為非常實用;
Group_concat()函數。看一下效果
這是一個簡單的查詢結果,再看一下使用這個函數的效果
該函數實現了將表中查出的某一列資料,轉換成一個字串數組。如所看到的,假設你就是想把查出的某一列轉為字串數組會非常實用。
這個多選能夠封裝為一個顆粒、把公用的東西抽象出來弄成一個個的顆粒,把它封裝為一個控制項,這個控制項有自己的函數獲得checkbox值和賦值等方法,還能夠封裝一些樣式等,還在考慮怎麼才幹把checkbox封裝到div標籤中。以後再用到時僅僅須要引入這個div標籤就可以,通過div標籤傳參控制多選。這涉及到自己定義標籤怎麼弄,在.NET中能夠開發使用者自己定義控制項,那麼在標籤中認為也是能夠開發自己定義標籤庫,還有類似於下拉式清單方塊等等,都能夠封裝起來。
不知道還有沒有別的思路能夠實現使用者控制項、或標籤的封裝?開發自己定義標籤查了一下好實現。把開發jar包引入進來實現幾個介面就能夠定義自己的標籤庫了,開發自己定義標籤庫能夠實現使用者自己定義功能。方便頁面上的布局,同一時候發現如今的非常多產品有關介面架構,不管介面多美觀、高端大氣。都是封裝原始的html標籤元素,封裝也就意味著能夠帶了自己心的特性,假設有特殊需求的時候能夠自己適當封裝一下。
方便別人編程、也提高了開發效率和編碼的靈活性。
前端架構(二)DIV多選複選框框的封裝和MySql資料庫存取