在网站开发中会常常用到多选框,好比说兴趣,爱好,工做地点等等内容的选择上。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初学者,对于以上实现方法也是在本身遇到问题过程当中本身先用蠢办法而后不断网上搜集资料才发现好的解决方案,对于效率问题还真没有计算过;还请大牛指点一二三,欢迎讨论交流!