我有一个搜索文本字段,用于搜索表格中的特定列,但结果与我预期的不同。
当用户尝试搜索“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/