用一个字符串搜索多个表字段,分开(MySQL)

时间:2011-05-10 17:20:46

标签: php mysql database search

我有一个简单的搜索功能,可以在表格中搜索匹配。基本上这个搜索的一个缺陷就是它试图完全匹配字符串。我希望它采取一串说“大红鸟”并分别搜索“大”,“红”和“鸟”对着桌子。这是我的搜索查询...

$result = mysql_query("SELECT * FROM files
         WHERE (tags LIKE '%$search_ar%' OR
         name LIKE '%$search_ar%' OR
         company LIKE '%$search_ar%' OR
         brand LIKE '%$search_ar%')
         $str_thera $str_global $str_branded $str_medium $str_files");

任何想法?感谢

修改 好的,这是我更新的查询,但它不会返回任何内容。

$result = mysql_query("SELECT * FROM files
           WHERE MATCH(tags, name, company, brand)
           AGAINST ('$seach_ar' IN boolean MODE)"); 

2 个答案:

答案 0 :(得分:2)

全文搜索确实会有所帮助,因为您确实需要搜索大量数据。可以在此处找到全文的良好参考:http://forge.mysql.com/w/images/c/c5/Fulltext.pdf

我说很多数据或相当数量的原因是,如果搜索结果产生的返回行数超过一定百分比的总行数,则不会返回任何数据。


如果您想继续使用LIKE方法,则可以。你只需要分开单词(explode)并使用AND将它们连接到sql查询中:

...(tags LIKE '%$search_ar[0]%' AND tags LIKE '%$search_ar[1]%') OR ....

以这样的方式。这种方法可能会变得过于复杂,特别是如果你想要返回包含任何单词而不是所有单词的匹配项。所以,它需要做一些自定义和自动化,但它是可能的。

答案 1 :(得分:1)

如果出于某种原因,你不能使用全文搜索(好主意,尼克和布拉德,但只有MyISAM支持它,而且从我听到的,它并不是真的那么好),它不是太难使用explode()implode()进行基本搜索:

$search_arr = explode(' ',$search_str);
$search_str = implode('%',$search_arr);
//query where fields like $search_arr

或者:

$search_arr = explode(' ', $search_str);
   $sql = 'select * from files where ';
   foreach($search_arr = $term){
   $sql .= "tags like '%{$term}%' or " //fill in rest of fields
}

作为旁注:如果您计划增加搜索并且无法使用MySQL的全文搜索,我建议您查看其中一个搜索服务器,例如Solr或Lucene。