我正在构建一个接受用户输入关键字并输出匹配的数据的网站。例如,如果用户将关键字指定为“Restaurant pizza
”,则我的数据库应输出此类记录。
我当前的表中有一个名为category
的列和五列从keyword1
到keyword5
的列,其中包含其专用区域,即“披萨”,“鸡肉”或“烧烤”等
但我不知道如何编写SQL查询,因为用户可以按任意顺序输入关键字:首先是类别,或者首先是使用专门区域。
所以这样的查询肯定不会返回任何结果(假设用户输入'Restaurant pizza'进行查询):
SELECT *
FROM message
WHERE category LIKE 'Restaurant pizza'
OR keyword1 LIKE 'Restaurant pizza'
OR keyword2 LIKE 'Restaurant pizza'
我想将输入关键字拆分为单词然后将WHERE子句中的每个单词运行到数据库是一个坏主意。但我真的不知道如何实现我的目标。
另外,在这种情况下,您能否就如何构建索引给我一些建议?
答案 0 :(得分:1)
你可以试试这个:
SELECT *
FROM message
WHERE `category` LIKE '%Restaurant%'
AND (`keyword1` IN ('Pizza','chicken','bbq')
OR `keyword2` IN ('Pizza','chicken','bbq'))
答案 1 :(得分:1)
您应该在FULLTEXT
和category
列上创建keywords
索引,然后在查询数据时通过分隔符(空格字符)爆炸查询字符串,然后创建类似以下内容的查询:
SELECT * FROM items
WHERE
MATCH (category,keyword1,keyword2,keyword3,keyword4,keyword5)
AGAINST ('pizza')
AND
MATCH (category,keyword1,keyword2,keyword3,keyword4,keyword5)
AGAINST ('restaurant');