这似乎太容易了,因为首先是一个问题 - 但无论如何这是。
假设您有一个搜索表单,并且您正在寻找在某个行业的某些分支机构进行交易的公司。表单将为每个问题提供一组复选框,用户可以选择他们想要的任何金额。
您最喜欢的颜色是什么?
[]红色
[]蓝色
[]黄色
您最喜欢的水果是什么?
[] Apple
[]橙色
[] Banana
问题1
如果用户检查红色和蓝色 - 我们是否从仅匹配两者的数据库行中提取?或者我们是否包含仅匹配红色或仅蓝色的行?在我看来,最终用户可能期望看到一个结果或另一个结果,或两者都有!
问题2
请记住,我必须使用的CMS将数据存储在每个问题的数组中。因此第一个问题的公司A可能持有“红色|蓝色”或“红色”或“红色|蓝色|黄色”等值 - 加上我所拥有的表格有10个类别,每个至少有5个复选框 - 我怎么能将其转换为高效优化的查询,而不必诉诸if / else mish mash?
任何帮助都非常感激。
答案 0 :(得分:1)
它很可能是一个连接(红色或蓝色)而非分离(红色和蓝色),但它取决于问题的语义。如果您提供可以共同出现的选项,那么您可能需要分离。
我看不到比
更好的方法 $ colors = $ POST [“color []”];
$ items = array();
foreach($ colors as $ color){
$ items [] =“'$ color'IN colors”;
}
$ SQL。=“AND(”。implode('OR',$ items)。“)”;
答案 1 :(得分: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
根据您可以对结果进行排序的次数