【问题标题】:MySQL/PHP AutosuggestMySQL/PHP 自动建议
【发布时间】:2011-12-28 00:03:50
【问题描述】:

在我的 MySQL 数据库中,我有一个这样的术语列表(首字母大写,大多数情况下是复数)

Hairdressers
Restaurants
Beauty Salons 
Furnitures For Restaurants

在我的网站上,我有一个搜索栏,用户可以在其中搜索这些词(我的网站是一种 POI 查找器)。搜索栏有自动建议功能,但我的查询有问题。

SELECT * FROM TABLE WHERE word = 'userword%'

因此,如果用户输入“Res”,它将返回所有以“Res”开头的单词。很公平,这行得通,但是在我的数据库中,我也有它们之间有空格的单词(餐厅家具),我希望如果用户输入“Res”,mysql查询也返回餐厅家具。这个我试过了

SELECT * FROM TABLE WHERE word = '%userword%'

是的,这很好用,但是……有点放松……它会返回所有内容,因此如果用户输入“a”,它将返回所有包含 a 的单词……而我不想要这个。

那么如何才能使查询只对每个单词的第一个字母起作用呢?和我的第一个查询一模一样,但要考虑带空格的单词?

【问题讨论】:

  • 您可能想将正则表达式传递给 mysql。对不起,但没有时间发布完整的答案:-(
  • 全文是要走的路。一个正则表达式也可以,但如果你真的只想要你所说的两种情况,一个 OR 也可以工作:WHERE word LIKE 'userword%' OR word like '% userword%'(注意第二个查询中用户字之前的空格)。
  • 如果 userword = restaurant(不带 s)则不起作用,查询首先返回餐厅的 Fournitures,然后是餐厅

标签: mysql character word code-first autosuggest


【解决方案1】:

查看 mysql FULL Text Search 功能。也看看这个article,很详细的解释了mysql全文搜索。

【讨论】:

  • 您好,谢谢您的提示,我不知道全文搜索。所以我做了一个测试,但似乎搜索引擎不适用于纯/单数。例如,如果一个匹配(名称)再次('restaurant')它返回0行..但如果我添加一个's'它返回我正确的行..我尝试在布尔模式位似乎分数系统不起作用) 按分数 DESC 排序;所有分数都是0
  • 全文搜索跨行数据。如果您有几行,搜索通常会得到改善。如果某个单词出现在大约 50% 的行中并且不会显示包含该单词的行,它将把它视为垃圾邮件。
猜你喜欢
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多