2012-10-22 175 views
1

我有这样的代码为我的搜索引擎:PHP搜索引擎 - 搜索多个关键字

if(isset($_POST['search'])) 
    { 
     $search = $_POST['search']; 
     $terms = explode(",", $search); 
     $projectlistquery = " 
      SELECT project.accid, customer.custid, projectid, project.datefrom, custnamecode, dateto, daluur, project.gebruikersid, gebruikers.gebruikersid, 
      type, typeid, typename, custsurname, custmidname, custforename, acc1cust, acc2date, acc3nrofproj, acc4user, project.crew, project.jobinstr, project.projectinfo, usersurname, usermidname, userforename 
      FROM project 
       INNER JOIN type on project.type = type.typeid 
       INNER JOIN customer on project.custid = customer.custid 
       INNER JOIN accountingcode on project.accid = accountingcode.accid 
       INNER JOIN gebruikers on project.gebruikersid = gebruikers.gebruikersid   
      WHERE 
     "; 
     $i = 0; 
     foreach ($terms as $each) 
     { 
      if ($i++ > 0) 
      $projectlistquery .= ' OR '; 

      $projectlistquery .= "concat(custsurname, custforename, custmidname, custpostal, custphone1, custphone2, custfax, custnamecode, acc1cust, acc2date, acc3nrofproj, acc4user, typename, usersurname, usermidname, userforename) LIKE '%$each%' "; 
     } 
     $projectlistquery .= " ORDER BY projectid "; 
    } 
    else 
    $projectlistquery= " // query to show all records. 

现在这个工程的搜索1个键完全正常。

如果我搜索了一个名字:汉斯·范Meulen的,它显示了汉斯的所有名称,在它和Meulen的“面包车”的所有名称。所以如果我的数据库中有Dude van Berkel,他也会显示出来。我想一起搜索3个字符串。

这是achieveable与破灭? $ terms = implode(“,”,$ search);但是,在'ORDER BY projectid'中返回MySQL语法错误。
还是我必须调整我的SQL?

回答

1

,使您的搜索字符串是完整的你只是删除explode(",", $search);部分。你现在正在做的事情基本上是把它拆开来搜索每一个字。 这应该给你留下“Hans van Meulen”作为搜索字符串。

+0

感谢。现在我删除它,但是我在'ORDER BY projectid'中得到了与语法相同的错误。我删除了$条款var和取代的foreach($条款...)与($搜索另存为...) –

+0

看起来应该只要搜索词是正确的格式工作。尝试删除ORDER BY投影周围的空格 – Alex