【问题标题】:IF THEN in mySQL queryIF THEN 在 mySQL 查询中
【发布时间】:2016-12-09 14:15:23
【问题描述】:

我需要为这个 php mysql 查询找到正确的语法,尽管搜索和反复试验,我还是画了一个空白。

我有一个库存商表 - “库存商”,我需要根据 state1、state2 或两者的存在从每一行中提取数据。如果只有 state1 存在,则提取该记录,如果它们都存在那么我需要基于 state2 的记录。

SELECT * FROM `Stockists` WHERE state1 = 'vic' AND state2 IS NULL
IF state2 IS NOT NULL
THEN
SELECT * FROM `Stockists` WHERE state2 = 'vic'

我已经搜索并使用了很多不同的示例,但似乎没有任何效果。任何建议或线索将不胜感激。

干杯

【问题讨论】:

  • 你在这里犯了一个严重的错误 - 你有值 vic 并且你正在交换你正在搜索该值的列。在 SQL 中,我们以相反的方式做事——我们的列是不变的,而我们的值是变化的。此外,IF 是在 SELECT 部分完成的,而不是在 WHERE 之后。从技术上讲,即使您解决了以某种方式提出解决方案的问题,您的设计也是 100% 明确错误的。为了按照我们想要的方式做事,我们使用规范化,它可以让我们以各种方式查询数据(它总是有效的)。您的设计未标准化。
  • 有点刺耳,不知道是什么情况导致数据排成这样;据我们所知,它可能是一个继承的数据库。
  • @pala_ - 我不是在讨论 是什么 导致了这样的设计,我只是强调这种方法引起的问题。当人们以错误的方式使用工具时,就会发生坏事——就像这里一样。然后需要一个巨大的 hack 来使其按预期工作,而应该做的只是一个简单且适当的数据模型构造。
  • 我不明白 state1 是表的 state2 列吗?
  • 感谢您的反馈 NB 但@pala 确实是正确的。数据库直接来自MYOB软件。感谢您抽出时间告诉我我做错了什么。

标签: php mysql sql if-statement


【解决方案1】:
select *
  from stockists
    where (state2 = 'vic') or (state1 = 'vic' and state2 is null);

试试这个。获取 state2 设置为 vic 的所有库存商,以及 state1 设置为 vic 的所有库存商,其中 state2 未设置。这是一个可以试用的演示:http://sqlfiddle.com/#!9/15a08/1

它不会检索 state1 = 'vic' 和 state2 = 'someotherstate' 的记录

【讨论】:

    【解决方案2】:
    SELECT * FROM Stockists WHERE (state2 IS NULL and state1 = 'vic') 
      OR (state2  = 'vic')
    

    【讨论】:

      【解决方案3】:

      不确定它是否能回答您的问题,但在这里您可以了解 if statment 在 mysql 中的工作原理。

      SELECT
          IF(state1 = 'vic', 'yes', 'no') as 'match fist condition',
          IF(state2 = 'vic', 'yes', 'no') as 'match second condition',
          IF(state1 = 'vic' and state2 = 'vic', 'yes', 'no') as 'match both conditions'
      FROM stockists
      WHERE state1 = 'vic' or state2 = 'vic'
      ;
      

      【讨论】:

        【解决方案4】:
        SELECT 
             * 
        FROM 
            `Stockists` 
        WHERE 
            IF(state1 = 'vic', state1 = 'vic' , (state1 = 'vic' OR state2 ='vic'))
        

        试试这个,然后告诉我。

        【讨论】:

        • 虽然这可能会回答问题,但在您的答案中加入一些文字来解释您在做什么总是一个好主意。阅读how to write a good answer
        • 它也没有回答问题。
        猜你喜欢
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        • 2018-10-30
        • 1970-01-01
        • 2010-10-25
        • 2012-01-16
        • 2023-03-25
        • 2012-10-12
        相关资源
        最近更新 更多