1

我必须实现用户在搜索字段中输入一些文本的功能,我需要查询并从表中提取与该文本相关的项目。在表中,我有接近 8 列面向用户和 4 列每当插入通过前端发生时,它们就会自动插入。

下面是我写的查询,它通过mysql客户端工作,

select SQL_CALC_FOUND_ROWS * 
from `database`.`ttable` 
WHERE testdatetime BETWEEN '2012/05/01' and '2012/09/27' 
and testimg IS NOT NULL 
and testtitle LIKE 't%' 
OR testname LIKE 't%' 
OR testaddr LIKE 't%'  
OR testph LIKE 't%' 
OR testoffs LIKE't%' 
OR testmaps LIKE 't%' 
OR testimg LIKE 't%' 
OR testdatetime LIKE 't%'  
order  by testdatetime desc;

现在由于某种原因,这个查询对我来说看起来有点奇怪,因为我正在检查每一列的值,并想检查这是否是实现它的正确方法,或者 mysql 有一些内置的特性,这些特性比这个查询产生更好的结果。如果有人可以指出正确的方向。由于我尚未实现此功能,我不知道它在性能方面的表现如何,但我知道 Like 子句在操作中有点密集。

4

2 回答 2

1

您最好使用全文搜索来进行字符串搜索,而不是类似语句。这样,您还可以找到搜索词的变体。这是 MySQL http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html全文搜索的链接

于 2012-09-28T17:39:37.743 回答
0

MySQL 有一个内置功能可以做你想做的事。它被称为全文索引。这将比一堆类似的语句更有效。这里有一些东西可以帮助您入门。

http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm

于 2012-09-28T17:37:06.477 回答