现有一个选择项,比如“大家喜欢的编程语言”,有5个可选项,比如 java , c, php ,c++ ,vc 。如果这个选择项是单选的话,那很简单,把选项对应的序号,比如1-5,写入数据库,数据表的字段也可以设置成int,并且加上索引,这样检索的速度会很快。但如果这个选项是多选的话,怎么处理呢?
最常规的做法,是把选中的多个项目用分隔符相连,写入数据库。
如下 写入的内容是 
“,1,3,”  
“,2,3,”
“,1,2,3,”
“,2,3,5”等等
这样数据表的字段就不能是int了,必须是char了。
并且在检索所有喜欢php的人 的sql 只能用  
字段 like '%,2,%'  了这样的效率肯定不高。请问大家有没有什么好办法,对付这些把复选框数据写入数据库,然后做检索的!!谢谢!!!

解决方案 »

  1.   

    把喜欢的编程语言分成多列放到SQL中???
      

  2.   

    java , c, php ,c++ ,vc 一个插入一列,哪个选中值就置为1,否则为0,,检索喜欢php的只要针对php那列就行了。
      

  3.   

    谢谢上面的兄弟姐妹们,你们说的这个方法不错,
    如果userid=100 的人 选择了 c 和 php
    我就在数据库里面写入
    insert into aaa (userid,item) values ('100','2');
    insert into aaa (userid,item) values ('100','3');两条记录,这样会非常方便的找到喜欢php的所有人的id。这个办法我也想到了,但现在还有个棘手的问题,就是,我录入数据库时,不止这一个复选框,还有几个复选框.比如,还有一个选择,大家喜欢的度假地,也是多选 北京 上海 杭州 西藏 新疆。
    我现在数据库想搜索 喜欢杭州和php的人
    我不可能在数据库里面存入n*m条记录啊
    大家多讨论讨论啊,
    谢谢。主要是解决数据库的效率问题!!
      

  4.   

    谢谢 zhongqixing1104 的回复关键是我有多个复选框,并且供选择的内容不定,不方便设置成数据库字段
      

  5.   

    如果说,你的选择项记录时只需要使用序号表示,(也就意味着不会或者几乎不会去改动选项)
    那么,可以这样:假设选项是 1北京 2上海 3杭州 4西藏 5新疆
    选择的是 1、3 数据库字段记录field时,'10300';
    选择 2、3、5 ,记录成 '02305';查询选择了 4西藏的,sql server中就是 substring(filed, 4, 1) = '4'效率相对于使用like要高一点
      

  6.   

    实际上,当选项×人员 数量不是很大的时候使用一个选项一条数据库记录 是常规做法lz说的n*m 不会很大的吧,100w 了不起了吧