2013-06-05 256 views
0

我试图使用包含字符串的一部分列来从表中的数据匹配字符串

表search_data:

id  data 

1  news 
2  today  
3  latest 

当我使用关键字“新闻”

select * from search_data where data like '%news%' 

它正在提取结果。但是当我使用关键字'最新消息'

select * from search_data where data like '%latest news%' 

它不工作,它显示一个空的结果集。

有人可以帮我查询。

谢谢。

回答

0

这是因为你正在寻找完整的字符串'最新消息'与文本任何一方。你需要做的where data like '%news%' or data like '%latest%',以实现他们未包含在同一行这两个关键字的搜索

+0

这就是这样 - 用户将输入关键词,他可能输入1个或多个关键字例如:“今日最新消息”或“今日最新消息” '所以关键字数量不受限制。所以我必须相应地搜索。 – chaithanya

+0

@ Stephan的答案就是根据您的要求使用 –

1

您可以添加FULLTEXT索引,使您可以使用MATCH AGAINST

select 
    * 
from 
    search_data 
where 
    match(data) against ('latest news' IN BOOLEAN MODE) 

这将是最有效的方式,你可以阅读更多here

0

我不知道你是什么意思,但我想你想做点什么骗这 select * from search_data其中数据如'%latest%'或数据如'%news %'

+0

就是这样 - 用户将输入关键词,他可以输入1个或多个关键词例如:'今日最新新闻'或'今日美国最新新闻',关键词计数不受限制。所以我必须相应地搜索 – chaithanya

+0

哦,如果这样,你可以爆炸用户插入的内容,然后自己做一个查询。我不知道你用什么语言。在PHP中,我们可以做这样的事情。use函数攻击者($ userinput),那么你会得到一个数组,然后你可以foreach()来创建一个SQL.but对于这一点,我真的不认为使用sql来查询是不错的理想更多。我会考虑:SOLR对此,我认为如果您有大量数据,速度会更快。 – Dean

0

select * from search_data其中数据如'%latest news%'在此查询中提及最新消息,这意味着结果必须包含字符串中的“最新消息”,与您的数据集中不同,它不存在如何最新消息和新闻分开您可以在您的查询中使用“或”和“和”运算符