2013-04-22 215 views
0

所以我试图找出如何搜索多个字段,这里是我的代码:搜索多个搜索字词

 if (count($error) < 1) { 
      $searchSQL = 
"SELECT sid, sdate, stitle, slocation, skategori, stype, sbody, slist FROM job_search WHERE "; 

      // grab the search types. 
      $types = array(); 
      $types[] = isset($_GET['title'])?"`stitle` LIKE '%{$searchTermDB}%'":''; 
      $types[] = isset($_GET['desc'])?"`skategori` LIKE '%{$searchTermDB}%'":''; 
      $types[] = isset($_GET['list'])?"`slist` LIKE '%{$searchTermDB}%'":''; 


      $types = array_filter($types, "removeEmpty"); 

      if (count($types) < 1) 
      $types[] = "`sbody` LIKE '%{$searchTermDB}%'"; 

      $andOr = isset($_GET['matchall'])?'AND':'OR'; 
      $searchSQL .= implode(" {$andOr} ", $types) . " ORDER BY `stitle`"; 

      $searchResult = mysql_query($searchSQL) or trigger_error(
"Error.<br/>" . mysql_error() . "<br />SQL Was: {$searchSQL}"); 

你会发现我使用在$类型复选框=阵列();如果未选中复选框,搜索将使用$ types [] =“sbody LIKE'%{$ searchTermDB}%'”;.我想知道是如何才能让在{$ searchTermDB}多个$类型[]像一个例子:

$类型[] = “sbodystitleslist LIKE '%{$ searchTermDB}%'” ;

当然,这并不工作,但有什么办法,我可以放下的复选框,只是用LIKE“%{$ searchTermDB}%”“搜索所有字段;

+1

你看过MATCH AGAINST吗? – 2013-04-22 16:53:19

+0

正因如此,你可以参考@KaiQing正在谈论的内容:[Match Against](http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html)。这是你正在寻找的答案。 – 2013-04-22 16:54:19

+0

布尔全文搜索也可以工作:http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html – 2013-04-22 16:55:50

回答

0
SELECT sid, sdate, stitle, slocation, skategori, stype, sbody, slist 
FROM job_search 
WHERE MATCH(`stitle`, `skategori`, `slist`) 
AGAINST('{$searchTermDB}' IN BOOLEAN MODE) 

你可以以上是一个完整查询的基本示例

需要注意的是,您应该使用类似PDO或mysqli的方式来处理数据库通信。 mysql_函数已弃用

+0

Thankyou,我仍然在制定PDO,并且得到了很好的结果。 – 2013-04-22 17:15:42

0

这是解决方案。充分感谢@Kaiqing的帮助。我删除了$ types = array();并以下列取代它:

// If there are no errors, lets get the search going. 
    if (count($error) < 1) { 
     $searchSQL = " 
     SELECT sid, sdate, stitle, slocation, skategori, stype, sbody, slist 
     FROM job_search 
     WHERE MATCH(`stitle`, `skategori`, `slist`, `sbody`, `slocation`) 
     AGAINST('{$searchTermDB}' IN BOOLEAN MODE) "; 

     $searchResult = mysql_query($searchSQL) or trigger_error("There was an error.<br/>" . mysql_error() . "<br />SQL Was:  {$searchSQL}"); 

我不使用PDO和安全的选择是使用PDO的方法。