在字段中搜索整个单词,除了单词之外什么都没有

时间:2012-11-05 16:29:44

标签: php

我有一个带有关键字搜索的PHP界面,处理具有关键字字段的数据库(MySQL)。

设置关键字字段的方式如下,它是一个varchar,所有单词的格式如下所示...

,那里,他们,他们的,热等...

如果我想从搜索中返回确切的单词'the',将如何实现?

我已尝试在PHP中使用'the%''%the',但由于未返回关键字所在行的所有,因此无法正常工作。

有更好(更准确)的方法吗?

由于

5 个答案:

答案 0 :(得分:1)

如果您要选择完全关键字the的行:

  

SELECT * FROM table WHERE keyword ='the'

如果您要选择其中包含关键字the 的行:

  

SELECT * FROM table WHERE关键字LIKE'%the%'

如果您想使用关键字the选择开始的行:

  

SELECT * FROM表WHERE关键字LIKE'%'

如果您想使用关键字the选择结束的行:

  

SELECT * FROM table WHERE关键字LIKE'%the'

答案 1 :(得分:1)

试试这个

SELECT * FROM tablename
  WHERE fieldname REGEXP '[[:<:]]test[[:>:]]'

[[:<:]][[:>:]]是字边界的标记。

MySQL Regular Expressions

答案 2 :(得分:1)

如果你也搜索逗号,你可以确定你得到了整个单词。

where keywordField like '%, the, %'
   or keywordField like '%, the'
   or keywordField like 'the, %'

答案 3 :(得分:0)

也许我没有正确理解这个问题...但是如果你想要'the'出现的所有单词,那么LIKE'%word%'就可以了。

如果单词的数据库是巨大的,MySQL可能无法检索到某些单词,那么可以通过两种方式解决...

1-获得支持更大尺寸的数据库(没有多少人会选择这一个)。例如,SQL Server有一个'CONTAINS'函数,它比LIKE'%word%'更好。

2-使用使用倒排索引搜索的外部搜索工具。我使用Sphinx作为项目,它的效果非常好。如果您很少更新要搜索的数据行,这样会更好,这应该是这种情况。 例如,Sphinx会从你的MySQL表生成一个文件,并使用这个文件来解决搜索问题(速度非常快),每次在表上进行插入或更新时都应该重新编制索引,如果是你很少更新或插入新行。

答案 4 :(得分:0)

看起来你在列中有一对多的关系。为关键字创建一个单独的表可能会更好,每个关键字都有一行,而对于您正在搜索的任何内容,都可以使用外键。

做'%???%'通常是一个坏主意,因为DB无法使用索引,因此它将扫描整个表。这是否重要将取决于您正在使用的数据的大小,但它值得考虑。帮助DB性能的唯一最佳方法是在初始表设计中。稍后更改这可能很棘手。