简单的mysql搜索引擎

时间:2012-01-16 09:12:43

标签: mysql

我正在开发一个开源脚本。 (https://github.com/keverw/Random-Quotes)

SELECT * FROM quotes WHERE text LIKE '%$searchTermbox%' AND OR author LIKE '%$searchTermbox%' LIMIT 15

我正在尝试创建一个简单的搜索引擎,它搜索文本和作者,也不会有重复。有任何想法吗?因此,如果我输入“Kevin”,它将显示具有该名称的两位作者以及提及它们的行情。

所以AND OR因为有些人会提到它或者他们俩都不会....任何想法如何写出这样简单的东西?我在MySQL上非常基础。

id | text | time | author | approved是结构。也批准需要= 1

2 个答案:

答案 0 :(得分:2)

您不需要AND

SELECT * 
FROM quotes 
WHERE text LIKE '%$searchTermbox%' 
    OR author LIKE '%$searchTermbox%' 
LIMIT 15

这将选择文本或作者或两者都包含$searchTermbox的所有引号。

这是因为在使用OR时,也会涵盖AND案例。默认情况下,a OR b表示a, b or both

答案 1 :(得分:1)

请注意,使用LIKE '%...'通常效率低下,因为它要求对表中的每条记录进行单独扫描,并且不能利用索引。通常,针对此类问题的更有效方法是使用MySQL支持的全文索引(例如,参见http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)。

这种方法需要首先创建全文索引(一次性操作),然后使用专门的语法来查询数据(代替LIKE运算符)。

要创建全文索引(假设引号是MyISAM表),您可以使用:

ALTER TABLE quotes ADD FULLTEXT (author, text);

然后,等效的查询表达式可以写成:

SELECT * FROM quotes WHERE MATCH (author, text) AGAINST ('$searchTermbox')
  AND APPROVED=1
  LIMIT 15;

这应该提供与早期查询相同的结果,但可能会明显更快,尤其是在数据库很大的情况下。