php - 构建对特定表的搜索

标签 php mysql

我有一个搜索文本字段,用于搜索表格中的特定列,但结果与我预期的不同。

当用户尝试搜索“hello world how”时,他不会找到结果,因为我的查询是 LIKE '%hello world how%'。表格行包含字符串“hello world”。

如何使用 php 和 mysql 进行正确的搜索,如果我需要对多个表/表中的所有列进行搜索怎么办?哪种方法最好?

最佳答案

一种不好的方法是在空白处拆分用户的搜索文本。 “hello world how”将变成“hello%world%how”。然而,这仍然需要在“hello world”之后出现“how”这个词,并且不能保证“hello”和“world”彼此靠近。

此外,即使您在要搜索的列上放置了索引,以通配符 (%) 开头的 LIKE 子句也不能在 MySQL 中使用该索引。这意味着每次搜索都是全表扫描。这可能会变得很慢。

一个适合您的解决方案可能是 MySQL fulltext search .它非常灵活。但是,它只适用于 MyISAM 表。您可能想为您的数据使用 InnoDB,因为 MyISAM 不支持外键或事务。您可以创建使用 MyISAM 和全文索引的单独的专用表,仅用于搜索目的。

Sphinx是您可用的另一种选择。它是可以附加到 MySQL 和 PHP 的第三方搜索系统。

但是,所有这些答案都集中在一次搜索一列上。如果您需要搜索整行,那将变得更加有趣。您可能需要考虑一个基于“文档”的搜索系统,例如 ElasticSearch .

关于php - 构建对特定表的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3256909/

相关文章:

php - Codeigniter上传库获取Thumb文件名

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

php - 在通过本地主机上的浏览器将项目添加到数据库时遇到问题,例如用户之类的项目

php - Mysql计数问题

PHP PDO 安全

php - WooCommerce 以编程方式创建的产品忽略价格排序过滤器

mysql - 由于 TYPO3 中没有 "SET NAMES utf8;",导致国际字符损坏

mysql - SQL 和 SELECT 查询中的临时行

php - SQL - 记录多个日期/时间和计算时间差的最佳方法。

PHP bin2hex 与 mysql