php - MySQL 搜索查询类似

标签 php mysql full-text-search

我有几个文本字段的数据库表,我用它来过滤数据,每个文本字段都包含用冒号分隔的数字数据(例如“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/

相关文章:

php - MySQL 全文搜索仅适用于 BOOLEAN 模式。如何获得相关性?

php - PDO::FETCH_COLUMN 不获取任何内容

mysql - Drupal 数据库 4 字节 UTF-8 支持

mysql - 连接两个表并显示详细信息

php - PHP 搜索时漏掉一个字符怎么办?

javascript - 用户注册时获取实时通知

PHPUnit 代码覆盖率报告 foreach 内的误报

php - OpenCart 类别未显示

search - 多语言搜索引擎如何工作

php - mysql 全文!不要忽略任何事情