Catch-all搜索MySQL查询构建

时间:2010-09-01 09:15:08

标签: php mysql

我有一些代码可以构建SQL查询,以便在可能很大的表上执行一种轻松的,全方位的搜索,这样就像这样了

// $find_array derived from search string with space or comma used as a delimiter
foreach($find_array as $term){
    $clauses[]="(  
        OR last_name SOUNDS LIKE '$term'
        OR first_name SOUNDS LIKE '$term' 
        OR first_name LIKE '%$term%' 
        OR email SOUNDS LIKE '$term' 
        OR email LIKE '%$term%'                     

               [etc...]

        OR city LIKE '%$term%' 
        OR company SOUNDS LIKE '$term' 
        OR company LIKE '%$term%' 
    )";
}

这可能是一种非常错误的做法,但我想这在当时是有道理的。

看看这产生的查询 - 当然,它们甚至对搜索条件有限制,大约一英里长,并且充满了OR。这是某种可怕的犯罪 - 在表现方面还是其他方面?

尽可能使用IN子句会更好吗?

2 个答案:

答案 0 :(得分:2)

我不会说这是犯罪行为;如果这是你想要找到的,那就是你的查询必须做的事情。由于您正在寻找嵌入式文本,因此您可能希望考虑TEXT列和FULLTEXT索引。我会提供一个指向文档的指针,但MySQL网站似乎已被Oracle营销机器人接管,我找不到任何有价值的东西。

答案 1 :(得分:1)

恕我直言,没有任何问题


即使是两个主要的MySQL管理应用,PHPMyAdminAdminer(以前称为PHPMinAdmin)也使用完全相同的方式来创建搜索/全能搜索。请参见以下屏幕截图:

alt text