我正在制作一个HTML表单,我需要在数据库中保存复选框信息,但这些信息也需要可搜索。最好的方法?

时间:2011-02-24 21:53:14

标签: php mysql database search forms

所以我正在设计一个数据库,我有一个名为'resources'的实体,它具有标准属性,如name,url,email,非常适合数据库模式(作为varchars和text数据类型)。但是,这些资源具有需要在HTML表单中表示为复选框的其他属性,这意味着它们可以根据所选复选框的数量采用多个值,但也需要可搜索。实际上,需求声明大多数这些资源属性需要是可搜索的,并且对于varchar和text列类型来说很好,但是我不知道如何处理这些可以从一组中获取多个值的属性值(表示为复选框的属性。)

这是我的意思的一个例子:

资源主题

请选择此资源的主题:

  • 回收
  • 减少
  • 重新使用
  • 堆肥
  • 填埋

因此,资源属性是资源主题,如果用户检查,则为此资源记录 回收,重复使用和填埋然后我必须将此信息存储在数据库记录中,但是,它必须是可搜索的,这意味着如果用户查询“回收”,“重复使用”或“填埋”,则将返回上述记录。

顺便说一句,我必须在PHP和MySQL中这样做。因此,我尝试使用PHP序列化复选框并将它们存储为序列化字符串,但是,这些不是非常易于搜索,因为当我编写试图使用“LIKE”匹配术语的MySQL查询时,我得到的结果不一致。我怀疑这与PHP序列化数组的方式有关。所以我想知道是否有更好的方法来做到这一点。将数据存储为JSON编码字符串是一种更好的方法吗?

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:0)

我建议每个复选框一列。如果你在php代码中做一些映射,它们可以是boolean类型。

答案 1 :(得分:0)

您必须编写自定义逻辑才能使此搜索起作用。如果您在存储过程中执行此操作,则可能具有以下内容:

Select * from resource
Where name like '%' + @query + '%'
And (IsRecycling = 1 and 'recycling' like '%' + @query + '%')
[rest of your and statements will be identical to above and listed here]

免责声明:此代码未经过测试,但此处是为了演示一般概念。

答案 2 :(得分:0)

也许尝试使用一个字符串,其中每个字符代表是否勾选了复选框。

示例:

<?php
 $checkboxes = array ('Recycling',
                      'Reducing',
                      'Reusing',
                      'Composting',
                      'Landfill',
                       // etc.
                      );

 $string = ''; // the string that holds whether or not a checkbox is ticked
 foreach($checkboxes as $checkbox_id=>$checkbox_name)
     $string .= $_POST[$checkbox_name]?1:0;

 // example mySQL
 $update_query = "UPDATE `table` SET `checkbox_data` = '$string'";
 $select_query = "SELECT * FROM `table` WHERE SUBSTRING(`checkbox_data`,$checkbox_id,1) == 1"; 
?>

缺点是如果你需要经常对复选框列表进行更改 - 这样做会让人感到困惑,但这不是一个难以克服的问题。

答案 3 :(得分:0)

如果我理解正确,资源实体可能有多个主题(回收,减少等)。如果是这样,为什么不在Resource和Resource_topic之间建立多对多的关系?通过这种方式,您可以搜索标记为/属于“回收”,“减少”或“随意”的主题