像stackoverflow的SQL搜索查询

时间:2011-09-02 16:33:15

标签: php mysql search

就像用户在输入字段中写文章标题一样,我想搜索现有文章以查看是否有相似文章。

例如。

SQL search query like stackoverflow

我想找到与此标题相关的最相关文章。

我知道它是这样的:

WHERE article_title LIKE 'word'

但如何处理多个关键字?

3 个答案:

答案 0 :(得分:5)

使用全文索引,其类似于:

SELECT ... FROM ... WHERE MATCH (fieldname) AGAINST ('keyword keyword keyword');

或者将查询修改为

SELECT ... FROM ... WHERE (fieldname LIKE '%keyword%' OR fieldname LIKE '%keyword%' etc...)

在这两者中,全文版本会更快,因为它可以使用索引。 ' LIKE %...%版本将非常昂贵,因为该类的通配符搜索根本无法使用索引。缺点是全文索引仅在MyISAM表上可用,并且可能永远不可用于InnoDB表。

答案 1 :(得分:2)

您需要对其进行全文搜索。

确保使用MyISAM作为要搜索的表的引擎。

有下表

Table articles
--------------
id integer autoincrement PK
title varchar(255) with fulltext index
contents textblob with fulltext index

并使用如下查询:

SELECT id
  , MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited') 
  as relevance
FROM articles
WHERE MATCH(title, contents) AGAINST ('$title_of_article_thats_being_edited') 
ORDER BY relevance

请注意,当您输入标签时,SO会细化列表。

答案 2 :(得分:-1)

WHERE article_title LIKE '%word1%word2%'

将返回article_title按此特定顺序包含'word1'和'word2'的所有行