【发布时间】:2015-09-21 16:17:35
【问题描述】:
我正在做一个项目,我有一个数据库,其中包含一个汇总字段,该字段由网站访问者输入的 Web 表单填写。
当用户完成输入摘要字段时,我想使用用户在页面上输入的单词来查找数据库中包含他们在页面上填写的相同关键字的类似记录页。
我在想我可以拆分提交的摘要字符串,然后循环遍历数组并构建一个查询,这样查询最终会是这样的:
SELECT *
FROM my_table
WHERE summary LIKE '%keyword1%'
OR summary LIKE '%keyword2'
OR summary LIKE '%keyword3%';
但是,这似乎非常低效,并且由于数据库可能会变得非常大,因此可能会变成运行缓慢的查询。
然后我找到了 MySQL IN 子句,但这似乎只适用于多个值,其中一个字段只能连续包含其中一个值。
有没有一种方法可以使用 IN 函数,或者是否有更好的 MySQL 函数可以用来做我想做的事情,或者我的第一个想法是唯一的方法吗?
我想要实现的一个例子有点像 Stack Overflow。当您失去标题字段的焦点时,它会根据您提供的标题弹出类似的问题。
【问题讨论】:
-
您使用的是 InnoDB 还是 MyISAM?在 MyISAM 中,有一个
match against语句,对于全文字段来说非常强大。 -
@JayBlanchard 谢谢,但我使用的是 InnoDB,看起来全文函数仅适用于 MyISAM
-
与 FTS 和 innodb 相关的是InnoDB FULLTEXT Indexes。请阅读Full-Text Restrictions。两者都直接来自手册
-
所以在我看来,没有理由不能在同一个数据库中混合和匹配 myISAM 和 INNODB,在 MyISAM 中保持文本并进行连接。没什么大不了。这避免了“必须升级到 5.6 版”的说法
标签: php mysql full-text-search