【问题标题】:select / where mysql not selecting properly选择/mysql没有正确选择的地方
【发布时间】:2026-01-18 22:25:01
【问题描述】:

我在一些帮助下设法解决了这个问题,但是由于某种原因它无法正常工作。 最后的整行带有类别似乎很随机,我无法弄清楚它在做什么。

使用或持有似乎和当月一样工作正常,我相信如果所有项目都在一般类别中,但在其他任何地方都可以正常工作,而且很奇怪。

如果有人能看到问题,我们将不胜感激。

WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date )=4 AND Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers'

【问题讨论】:

  • 请发布一些示例数据和所需的输出

标签: mysql select where


【解决方案1】:

AND 优先于 OR,因此您现在读取的条件是:

WHERE ((Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date ) = 4 AND Category = 'General') OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers'

我假设你想要这个:

WHERE  status IN ('used', 'holding')
       AND MONTH(Display_Date) = 4
       AND category IN ('general', 'mountains', 'rivers', 'sky', 'grass', 'sea')

【讨论】:

    【解决方案2】:

    我假设您是说应该返回与您指定的任何类别值匹配的任何结果(以及匹配对 Status 和 Display_Date 的检查)。如果是这种情况,您需要将所有针对 Category 的检查用括号括起来:

    WHERE (Status = 'Used' OR Status = 'Holding') AND MONTH( Display_Date )=4 AND     (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers')
    

    【讨论】:

      【解决方案3】:

      很可能它与括号有关。我猜你想放一些类似的东西。-

      WHERE (Status = 'Used' OR Status = 'Holding') AND 
            MONTH(Display_Date) = 4 AND 
            (Category = 'General' OR Category = 'mountains' OR Category = 'rivers' OR Category = 'sky' OR Category = 'crass' OR Category = 'sea' OR Category = 'flowers')
      

      请记住,AND 优先于 OR,因此如果没有括号,只要 OR 语句中的任何一个是 true,您的原始条件就是 true,而不管之前的 AND 条件。

      【讨论】: