如何将关键字与SQL查询匹配?

时间:2015-03-19 06:22:10

标签: mysql sql

我正在构建一个接受用户输入关键字并输出匹配的数据的网站。例如,如果用户将关键字指定为“Restaurant pizza”,则我的数据库应输出此类记录。

我当前的表中有一个名为category的列和五列从keyword1keyword5的列,其中包含其专用区域,即“披萨”,“鸡肉”或“烧烤”等

但我不知道如何编写SQL查询,因为用户可以按任意顺序输入关键字:首先是类别,或者首先是使用专门区域。

所以这样的查询肯定不会返回任何结果(假设用户输入'Restaurant pizza'进行查询):

SELECT * 
   FROM message 
 WHERE  category LIKE 'Restaurant pizza' 
 OR     keyword1 LIKE 'Restaurant pizza' 
 OR     keyword2 LIKE 'Restaurant pizza'

我想将输入关键字拆分为单词然后将WHERE子句中的每个单词运行到数据库是一个坏主意。但我真的不知道如何实现我的目标。

另外,在这种情况下,您能否就如何构建索引给我一些建议?

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

SELECT *  
FROM message  
WHERE `category` LIKE '%Restaurant%'  
AND (`keyword1` IN ('Pizza','chicken','bbq')  
OR `keyword2` IN ('Pizza','chicken','bbq'))

答案 1 :(得分:1)

您应该在FULLTEXTcategory列上创建keywords索引,然后在查询数据时通过分隔符(空格字符)爆炸查询字符串,然后创建类似以下内容的查询:

SELECT * FROM items 
  WHERE 
  MATCH (category,keyword1,keyword2,keyword3,keyword4,keyword5) 
  AGAINST ('pizza') 
  AND 
  MATCH (category,keyword1,keyword2,keyword3,keyword4,keyword5) 
  AGAINST ('restaurant');