2012-12-12 83 views
0

我知道有一個嚮導誰可以回答這個...爲什麼此查詢忽略包含USA的字段?

我有一個PHP/MySQL數據庫,列出超過500個葡萄酒。使用表單,網絡訪問者可以通過酒名,國家,年份等搜索數據庫。

我測試了兩(2)個不同的查詢。

我想使用的拒絕返回國家特定的搜索美國,但與西班牙,澳大利亞,意大利,加拿大或智利(甚至美國 - 我測試)沒有問題。當用戶輸入一個酒名老式等,其發生以匹配美國產品

美國僅會出現。否則,它會把美國視爲不存在。

其他代碼(底部塊)返回所有美國搜索,但不搜索我需要的多個列/項。

  1. 此代碼不會找到美國

    $cob=mysql_real_escape_string($_POST['user-entry']); 
    
    // remove the line below to prevent searching multiple terms 
        $cob = '+' . str_replace(' ',' +',$cob); 
    
        $sql = sprintf ( 
        "SELECT CSPC, Country, Producer, Wine, Year, Price, 
        MATCH (CSPC, Country, Producer, Wine, Year) 
        AGAINST ('&s' IN BOOLEAN MODE) 
        FROM winecellar WHERE 
        MATCH (CSPC, Country, Producer, Wine, Year) 
        AGAINST ('%s' IN BOOLEAN MODE)", $cob, $cob) . $pricerange; 
    
  2. 國家特定的搜索該代碼會發現一個國家特定的搜索美國

    $cob=mysql_real_escape_string($_POST['user-entry']); 
    
        $sql="SELECT ID, CSPC, Country, Producer, Wine, Year, Price 
        FROM winecellar WHERE 
        (CSPC LIKE '%" . $cob . "%' 
        OR Country LIKE '%" . $cob ."%' 
        OR Producer LIKE '%" . $cob ."%' 
        OR Wine LIKE '%" . $cob ."%' 
        OR Year LIKE '%" . $cob ."%')" . $pricerange; 
    
    • MySQL服務器版本:5.1.65-cll
    • Country = varchar(20)
    • 國家= NULL沒有
    • 全文索引:國家,生產者,葡萄酒,年份

所以我的問題是,什麼是防止多術語代碼(在頂塊)從承認美國是一個有效的查詢?

任何幫助將不勝感激,謝謝你們。

Chris

回答

3

您正在使用的是FULLTEXT索引。默認的最小字長爲4.三個字母的字被忽略。 Here是更改默認值的參考。

+0

非常感謝dnagirl,我應該猜到了。我會看看我能做什麼。返回一點.. – user1515259

+0

我改變了FULL TEXT索引以排除國家/地區列,但它仍然沒有正確地找到美國。有關我如何修改PHP查詢的任何想法? - 見上面的代碼,謝謝。 – user1515259

+0

@ user1515259:我建議改變用戶提交國家的方式。讓他們使用選擇列表或獨家自動完成,以便國家可以是一個確切的而不是模糊的比較。然後你可以使用'WHERE country ='USA''。 – dnagirl

相關問題