mysql - 改进我的 sql 查询以在表的所有列中搜索文本

标签 mysql sql database search

我必须实现用户在搜索字段中输入一些文本的功能,我需要查询并从表中提取与该文本相关的项目。在表中,我有将近 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 子句在操作上有点密集。

最佳答案

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

关于mysql - 改进我的 sql 查询以在表的所有列中搜索文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12644693/

相关文章:

html - 将 HTML 表导出到 MySQL

php - 如何使用迁移重命名 laravel 中的列?

android - 如何将字符串值插入对话消息?

mysql - 从 Visual FoxPro 表更新 MySql 表时出现问题

php - mysqli 多个查询 - 设置变量产生 bool 错误/如何跳过这个?

sql - 如何在 Postgres 中连接多个表?

SQL排序算法

mysql - 将 sql 转换为 Django ORM

java - 表名中的特殊字符 hibernate 给出错误

php - mysql PHP 查询中的列名无效