我正在开发一个开源脚本。 (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
答案 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;
这应该提供与早期查询相同的结果,但可能会明显更快,尤其是在数据库很大的情况下。