【问题标题】:Why does this query ignore fields containing USA?为什么此查询忽略包含 USA 的字段?
【发布时间】:2012-12-12 21:28:22
【问题描述】:

我知道那里有一个巫师可以回答这个问题......

我有一个 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
    • 国家 = varchar (20)
    • 国家 = NULL 否
    • 全文索引:国家、生产商、葡萄酒、年份

所以我的问题是,是什么阻止了多术语代码(在顶部块中)将 USA 识别为有效查询?

任何帮助将不胜感激,谢谢大家。

克里斯

【问题讨论】:

    标签: php sql


    【解决方案1】:

    您正在使用FULLTEXT 索引。默认最小字长为 4。忽略三个字母的单词。 Here 是更改默认值的参考。

    【讨论】:

    • 非常感谢 dnagirl,我应该猜到了。我会看看我能做什么。回来一点..
    • 我更改了全文索引以排除 Country 列,但仍然无法正确找到 USA。关于如何修改 PHP 查询的任何想法? - 见上面的代码,谢谢。
    • @user1515259:我建议更改您的用户提交国家/地区的方式。让他们使用选项列表或专有的自动完成功能,以便国家可以准确而不是模糊比较。然后你可以使用WHERE country='USA'
    • 感谢您的建议,我不确定我是否可以正确编码其中任何一个,但我会看看我能想出什么,非常感谢:)
    • 嗨 dnagirl,我只是想让你知道,我的网络主机为我将最小字长更改为“3”。工作精美!所以,非常感谢您的帮助。干杯,克里斯。
    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2023-04-02
    • 2018-07-12
    相关资源
    最近更新 更多