【问题标题】:How create a better searching queryin MySQL如何在 MySQL 中创建更好的搜索查询
【发布时间】:2016-09-11 22:26:29
【问题描述】:

我有这个问题

SELECT * FROM category WHERE NAME LIKE '%GTX 980%'

这工作得很好,但有时当我输入例如 GTX 790 或任何其他时,它不会显示结果。

查询是否有任何方法可以代表由空格分隔的单词从行中搜索,例如在“GTX 790”查询中应该使用 GTX 和 790 等关键字进行搜索并显示组合结果!!

【问题讨论】:

  • 您可能希望研究 MySQL 的 FULLTEXT 搜索功能。
  • 您能否提供一个示例,说明如何将其优化为 FULLTEXT 搜索?
  • 拆分GTX和980,进行两个不同的查询,从而增加GTX被找到的机会。甚至可以进行 3 个或更多查询,例如 %TX,因为它也可以是 CTX 或 RTX;同样,GT%,因为它也可以是 GTR 等。在你的代码中放置一些适当的业务逻辑,这肯定会提高效率,但是由于同时运行大量查询,会降低性能。我的建议也是考虑 Elastic Search。

标签: mysql search


【解决方案1】:

如果我理解,您正在寻找 GTX 或 790 的任何东西?

尝试:

SELECT * FROM category WHERE NAME LIKE '%GTX%' or NAME LIKE '%980%'

这将搜索包含至少一个字符串的任何内容。

【讨论】:

  • 实际上这个 GTX 790 没有存储在 php line $name="GTX 790" 的变量中
  • 如果文本是“GTX 790”,您希望看到数据库中的哪些行?你不想去拿什么行?你能放几个例子行,这样我就可以明白你到底在找什么?
  • 让我给你一个场景,比如在一个网站中,如果一个人进入 GTX 790 并且由于现在不存在的产品行将被获取!但是,如果以“GTX”和“790”(两个单独的关键字)之类的方式搜索 GTX 790,则可能会返回一些与 GTX 匹配的行以及与 790 匹配的行
  • 所以如果你需要确切的字符串“GTX 790” - 使用: WHERE NAME = 'GTX 790' 如果你需要每个单词自己,然后用空格''和每个你得到的词:WHERE NAME LIKE '%WORD_1%' 或 NAME LIKE '%WORD_2%' 等等......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多