2012-10-22 6 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 키를 검색하기위한 완전히 잘 작동합니다.

한스 반 뮬런 (Hans van Meulen)은 한스의 모든 이름을 보여 주며 모든 이름은 반 (van)과 므렌 (Meulen)으로 표시됩니다. 그래서 내 데이터베이스에 Dude van Berkel이 있다면, 그는 또한 나타납니다. 그리고 나는 3 개의 문자열을 함께 찾고 싶습니다.

IMPLODE로 달성 할 수 있습니까? $ terms = implode (",", $ search); 하지만 'ORDER BY projectid'에서 MySQL 구문 오류를 반환합니다.
또는 SQL을 조정해야합니까?

답변

1

검색 문자열이 손상되지 않도록 explode(",", $search); 부분 만 제거하면됩니다. 지금 당신이하고있는 일은 기본적으로 모든 단어를 검색하기 위해 그것을 찢어 버리는 것입니다. "Hans van Meulen"을 검색 문자열로 남겨 두어야합니다.

+0

감사합니다. 이제 제거했지만 'ORDER BY projectid'구문에 대한 동일한 오류가 발생합니다. $ terms var을 제거하고 foreach ($ terms as ...)를 ($ search as ...)로 바 꾸었습니다. –

+0

검색어가 올바른 형식 인 한 작동해야합니다. ORDER BY 프로젝트 ID 주위의 공백을 제거하십시오. – Alex