2012-07-10 93 views
0

因此,我有一個表單搜索公司列表,以查看該公司是否在網站上註冊。PHP/MySQL搜索沒有返回所有結果

當公司名稱是三個或更少的字符,我可以看到它在數據庫中的結果不會顯示。

例如,如果公司的名稱是「ABB優特」,檢索是ABB,那麼搜索如果搜索優特返回0

但是那麼搜索返回結果。

下面是我使用的代碼:

<?php 
     $out = ''; 
     if ((isset($_POST['companysearch-name'])) && ($_POST['companysearch-name']==NULL)) { 
      $out .= '<h3>No matches. Please enter a company name.</h3>'; 
     } else if (isset($_POST['companysearch-name'])) { 
      $queryString = htmlspecialchars($_POST['companysearch-name'],ENT_QUOTES);     
      if(strlen($queryString) >0) { 
       $query = $wpdb->get_results("SELECT DISTINCT (company_name) FROM wp_companies WHERE MATCH (company_name) AGAINST ('$queryString')"); 
       $searchStr = "%" . $queryString . "%"; 
       $searchStr = str_replace(" ","%",$searchStr); 
       $numresults = count($query); 
       if($query) { 
        $out .= '<div><ul>'; 
        foreach($query as $result): 

        $out .= '<li>'.$result->company_name.'</li>'; 
        endforeach; 
        $out .= '</ul></div>'; 
        $out .= "<p>Is your company on this list? If YES, your company already has the scheme in place and you can setup a donation right now.</p>"; 
        $out .= '<a class="button" href="/donate/"><span>Start Giving</span><b></b></a>'; 
       } else { 
        $out .= '<h3>No matches found.</h3>'; 
        $out .= "<p>Can't find your employer? They may have only just signed up - <a href='/contact-us/'>contact us</a> and we'll check it out for you.</p>"; 
       } 
      } 
     } 
    ?> 

任何幫助極大的好評! ...溫柔,這是我第一次。

+0

你可以改變你的數據庫的配置,也可以使用'那裏COMPANY_NAME LIKE%$的queryString%'但很有可能會慢一些 – jcho360 2012-07-10 17:38:27

回答

4

默認情況下,MySQL中的全文索引省略了包含三個或更少字符的字。

的最小和詞語要被索引通過 所述的ft_min_word_len和ft_max_word_len系統自變量的定義的最大長度。 (請參見 第5.1.3節「服務器系統變量」。)默認最小值爲四個字符;默認最大值取決於版本。如果您更改了 這兩個值,則必須重建您的FULLTEXT索引。例如,如果 你希望一個3字符的單詞變爲可搜索,則可以通過以下行中的一個選項 文件中設置 的ft_min_word_len變量:在[mysqld]的ft_min_word_len = 3

然後重新啓動服務器,重建FULLTEXT索引。注意 特別是關於myisamchk在這個列表後的指令 的評論。

http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html

+0

感謝您的答覆rawb。我現在的問題是,該網站是在一個共享的託管軟件包,所以我沒有訪問MySQL設置。或者我?我是一名前端設計師,因此冒險進入這個後端領域對我的鼻竇造成嚴重破壞...... – moeseph 2012-07-11 10:56:49