【问题标题】:MySQL MATCH AGAINST query with long WHERE AND OR syntax?MySQL MATCH AGAINST 具有长 WHERE AND OR 语法的查询?
【发布时间】:2010-08-03 13:37:38
【问题描述】:

以下查询未按我预期的方式工作:

SELECT DISTINCT * 
FROM mytable 
WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
AND Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE'

这返回的结果比我预期的要多 - 它不会将我的结果限制在“榆树”上。

如果我删除最后一行(AND Color...),我可以看到我的 MATCH AGAINST 工作得很好,并且确实仅限于 'elm' 上的那些。

我是否需要执行子查询或其他操作来提取颜色内容?正确的语法会很有帮助,谢谢!

【问题讨论】:

    标签: mysql match where against


    【解决方案1】:

    可以这样写吗

    SELECT DISTINCT * FROM mytable 
    WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm')
    AND Color IN ('RED', 'WHITE', 'BLUE') 
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      也许括号会有所帮助?

      SELECT DISTINCT * 
      FROM mytable 
      WHERE MATCH (StrNum, StrName, StrType, TownName, Zip) AGAINST ('elm') 
      AND ( Color = 'RED' OR Color = 'WHITE' OR Color = 'BLUE' )
      

      【讨论】:

      • 添加括号使它的工作就像我离开最后一行一样。意思是,它返回所有颜色,而不仅仅是红、白、蓝。
      【解决方案3】:

      使用 MATCH AGAINST 要求搜索的每个单词至少有 4 个字符(默认情况下),因此“Elm”将被忽略。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多