2012-12-12 45 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

相关问题