在網站開發中會常常用到多選框,好比說興趣,愛好,工做地點等等內容的選擇上。php
如何在開發過程當中將這些內容簡潔優雅地保存到數據庫中,而且高效的進行搜索,方便的進行修改,整個流程須要藉助逗號「,」這個符號的幫忙。sql
逗號在整個過程當中主要做用表如今如下幾點:
數據庫
① 將頁面提交的多選框數組形式轉化爲字符串形式(逗號分隔),並保存到數據庫中
數組
② 搜索過程當中如何對保存到數據庫中的逗號分隔字符串進行搜索(多項搜索)
函數
③ 如何將用戶多選的內容從數據庫顯示到頁面
網站
針對①,咱們採用PHP中經常使用的函數來解決:code
$submitChkBoxArr = $_POST['chkboxName']; $insertDataStr = implode($submintChkBoxArr,','); // 數據庫保存執行語句 ...
PHP中explode 和 implode函數能夠實現數組和字符串的互換,其中字符串的分隔符能夠本身指定。索引
針對②,因爲數據庫中保存的數據格式以下圖所示開發
user_id | hobby |
001 | 1003,1005,1007,1009 |
003 | 1004 |
005 | 1008,1009,1010 |
006 | 1001,1006,1008,1009 |
若是要查找選中hobby爲1005或者1008的用戶的話,SQL語句如何書寫是好?請用一條SQL獲取結果,(表字段定義能夠修改)字符串
最笨的辦法是用一堆LIKE和滿頁面的%,再聰明的辦法可能會想到FIND_IN_SET,可是也沒法用擺脫用不少OR鏈接的結果。這時候應該想到的是全文檢索,固然首先要對hobby字段創建全文檢索索引,而後利用MySQL中自帶的函數來實現:
SELECT * FROM TEST WHERE MATCH hobby AGAINST('1005,1008')
固然,逗號分隔符每一個被分割的字符串長度必須大於3,不然會被忽略。可見MySQL開發者是很喜歡逗號的。 笑:-D
對於③,實現起來比較簡單,從數據庫中將逗號分割的字符串取出,用explode函數將字符串轉化爲數組,而後對於數組在頁面中顯示時作適當處理,固然最好在頁面顯示前將選中項判斷賦值,而後直接在頁面予以顯示。
總結:
小強屬於LAMP初學者,對於以上實現方法也是在本身遇到問題過程當中本身先用蠢辦法而後不斷網上搜集資料才發現好的解決方案,對於效率問題還真沒有計算過;還請大牛指點一二三,歡迎討論交流!