我有一个带有关键字搜索的PHP界面,处理具有关键字字段的数据库(MySQL)。
设置关键字字段的方式如下,它是一个varchar,所有单词的格式如下所示...
,那里,他们,他们的,热等...
如果我想从搜索中返回确切的单词'the',将如何实现?
我已尝试在PHP中使用'the%'
和'%the'
,但由于未返回关键字所在行的所有,因此无法正常工作。
有更好(更准确)的方法吗?
由于
答案 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[[:>:]]'
[[:<:]]
和[[:>:]]
是字边界的标记。
答案 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性能的唯一最佳方法是在初始表设计中。稍后更改这可能很棘手。