我有一些代码可以构建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子句会更好吗?
答案 0 :(得分:2)
我不会说这是犯罪行为;如果这是你想要找到的,那就是你的查询必须做的事情。由于您正在寻找嵌入式文本,因此您可能希望考虑TEXT列和FULLTEXT索引。我会提供一个指向文档的指针,但MySQL网站似乎已被Oracle营销机器人接管,我找不到任何有价值的东西。
答案 1 :(得分:1)