这里的问题是我有多列:
| artist | name | lyrics | content
我想通过多个关键字在这些列中进行搜索。问题是我不能用LIKE或/和制作任何好的算法。
最好的可能是在每列中搜索每个关键字,但这样我将获得可能包含name
中关键字的结果,但不会包含artist
的第二个关键字。
我希望所有内容都与 AND 相关,但这样,如果我只搜索一列,它将适用于关键字。换句话说,要接收结果,每列都必须包含所有关键字...
有没有人可能知道我必须创建什么算法,当你用3个关键词搜索时(例如:1为艺术家,2为名称),以找到正确的结果?
答案 0 :(得分:2)
最好的解决方案不是使用MySQL进行搜索,而是使用像Apache Solr这样的文本索引工具。
然后,您可以针对Solr运行查询,如:
name:"word" AND artist:"otherword"
即使将原始数据保存在MySQL中,使用Solr来索引数据也很常见。
它不仅可以为您提供所需的查询灵活性,而且比在MySQL上使用LIKE '%word%'
查询运行速度快数百倍。
另一种选择是使用MySQL的内置fulltext indexing功能:
CREATE FULLTEXT INDEX myft ON mytable (artist, name, lyrics, content);
SELECT * FROM mytable
WHERE MATCH(artist, name, lyrics, content)
AGAINST ('+word +otherword' IN BOOLEAN MODE)
但是如果你想搜索特定列中出现的单词,它就不那么灵活,除非你在每一列上创建一个单独的索引。
答案 1 :(得分:0)
AND也适用于显示多行。它只取决于你没有提供的表格中的行数。 PS,对不起,如果我的回答不清楚,我没有声誉可以发表评论