在网站开发中会经常用到多选框,比如说兴趣,爱好,工作地点等等内容的选择上。
如何在开发过程中将这些内容简洁优雅地保存到数据库中,并且高效的进行搜索,方便的进行修改,整个流程需要借助逗号“,”这个符号的帮忙。
逗号在整个过程中主要作用表现在以下几点:
① 将页面提交的多选框数组形式转化为字符串形式(逗号分隔),并保存到数据库中
② 搜索过程中如何对保存到数据库中的逗号分隔字符串进行搜索(多项搜索)
③ 如何将用户多选的内容从数据库显示到页面
针对①,我们采用PHP中常用的函数来解决:
$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 TESTWHERE MATCH hobby AGAINST('1005,1008')
当然,逗号分隔符每个被分割的字符串长度必须大于3,否则会被忽略。可见MySQL开发者是很喜欢逗号的。 笑:-D
对于③,实现起来比较简单,从数据库中将逗号分割的字符串取出,用explode函数将字符串转化为数组,然后对于数组在页面中显示时做适当处理,当然最好在页面显示前将选中项判断赋值,然后直接在页面予以显示。
总结:
小强属于LAMP初学者,对于以上实现方法也是在自己遇到问题过程中自己先用蠢办法然后不断网上搜集资料才发现好的解决方案,对于效率问题还真没有计算过;还请大牛指点一二三,欢迎讨论交流!