2011-10-24 48 views
0

这看起来太简单了,因为首先是一个问题 - 但这里是无论如何。带有多个复选框类别的PHP MySQL搜索表单

可以说你有一个搜索表单,并且你正在寻找在一个行业的某些分支中处理的公司。该表格将为每个问题提供一组复选框,用户可以选择他们想要的任何数量。


你最喜欢什么颜色?

[]红

[]蓝

[]黄

你最喜欢什么水果?

[]苹果

[]橙色

[]香蕉


问题一号

如果用户检查红色和蓝色 - 做我们拉来自仅匹配两者的数据库行?或者,我们是否也包含仅匹配红色或仅蓝色的行?在我看来,最终用户可能期望看到一个或另一个或两个结果!

问题二号

霸菱记住,CMS我要使用的数据存储在阵列中的每个问题。因此,第一个问题的公司A的值可以是“红色|蓝色”或“红色”或“红色|蓝色|黄色”等 - 加上我有的表单有10个类别,每个至少有5个复选框 - 我怎样才能将其转换为高效且优化的查询,而不必求助于if/else mish mash?

任何帮助非常感谢。

回答

1
  1. 它很可能是连接(红色或蓝色)而不是分离(红色和蓝色),但它取决于问题的语义。如果您提供可以共同发生的选项,那么您可能需要进行分离。

  2. 我看不出更好的办法不是像

    $颜色= $ POST [ “颜色[]”];
    $ items = array();

    的foreach($颜色$颜色){

    $项[] = “ '$颜色' IN的颜色”;

    }

    $ SQL = “AND(” .implode( '或',$项目)。“)”;

0

对于P2,我将创建一个“多对多”的表,并使用带IN语句的查询。 对于P1,像 例如:红色,蓝色,白色

select id,color,count(color) as occurrences from table inner join table_attributes where color in ('red','blue','white') order by occurrences 

基础上,你可以对结果进行排序出现的次数