我有几个文本字段的数据库表,我用它来过滤数据,每个文本字段都包含用冒号分隔的数字数据(例如“1:2:4:5:6:7:9”)
id | title | field1 | filed2 | field3 |
1 | Some title1 |1:2:3:4:5:6:7 |1:2:3:6:7 | 1:2:4:5:7:9:10:11 |
2 | Some title2 |1:2:3:4:5:6:7:8:9:10:11 |1:2:3:4:5:6 | 1:2:4:5:7:9:10:11 |
3 | Some title3 |1:2:3:4:5:6:7 |1:2:3:6:9 | 1:2:4:5:7:9:10:11 |
4 | Some title4 |3:4:5:6:7:10:11 |1:2:3:10:11 | 1:2:4:5:7:9:10:11 |
5 | Some title5 |1:2:3:4:5:6:7 |1:2:3:6:7 | 1:2:4:5:7:8:9:11 |
6 | Some title6 |2:3:4:5:6:7:9 |1:2:3:6:7 | 1:2:4:5:7:9 |
使用搜索表单,我为 field1、field2 和 field3 的每个参数使用复选框,并使用 php foreach 为每个字段创建 LIKE '%parameter
%'
我的 SQL 查询看起来像
SELECT * FROM table WHERE (field1 LIKE '%1%' OR field LIKE '%2%') AND (field2 LIKE '%1%' OR field2 LIKE '%2%')
不幸的是,这个查询没有给我很好的结果,因为我得到的行与我的想法不符:)
例如,如果用户选择了复选框值 1、2、3、4、5、6、7 查询只需要返回第 1、3、5 行
是否有更好的解决方案来过滤此结果
问候
附加信息:
让我尝试向您解释更多的想法
用户检查具有某些值(即 1、3、4、5、6、7)的复选框脚本需要仅返回包含这些值的结果在 field1 中,当用户选中控制 field2 和 field3 的其他复选框时会发生同样的事情,但现在这并不重要
附加信息 pt2.
我会尽力给大家更好的解释我想要实现的目标
我有带有复选框和单选输入字段的搜索表单,每个复选框组(值从 1 到 10)代表表中的列(field1、field2、field3),例如,列 field1 中的每个值代表选定的复选框(它们是在管理面板中为每一行设置)现在默认情况下所有复选框都被选中,当用户取消选择相应的复选框结果需要根据过滤器过滤行时,我现在得到所有结果 很好的例子我试图实现的是http://www.hotelscombined.com/City/London.htm
因此,如果取消选中值为 2 的复选框,则它不能列在结果中
BR 思乐
最佳答案
我认为问题在于 %1%
不仅匹配 1
而且还匹配 10
, 11
,等
最好这样做:
WHERE CONCAT(':', field1, ':') LIKE '%:1:%'
关于php - MySQL 搜索查询类似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6678631/