Php 如果在mySQL查询中

Php 如果在mySQL查询中,php,mysql,sql,if-statement,Php,Mysql,Sql,If Statement,我需要为这个php mysql查询找到正确的语法,尽管进行了搜索和反复尝试,我还是画了一个空白 我有一个stockists表-“stockists”,我需要根据state1、state2或两者的存在从每一行中提取数据。如果只有state1存在,则提取该记录,如果它们都存在,则我需要基于state2的记录 SELECT * FROM `Stockists` WHERE state1 = 'vic' AND state2 IS NULL IF state2 IS NOT NULL THEN SELE

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

我有一个stockists表-“stockists”,我需要根据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'
我已经搜索和玩了很多不同的例子,但似乎没有任何效果。任何建议或线索将不胜感激

干杯

试试这个。获取state2设置为vic的所有库存人员,以及state1设置为vic的所有库存人员,其中state2未设置。下面是一个要尝试的演示:

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

SELECT * FROM Stockists WHERE (state2 IS NULL and state1 = 'vic') 
  OR (state2  = 'vic')

试试这个,让我知道。

不确定这是否是您问题的答案,但在这里您可以理解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'
;

您在那里犯了一个严重错误-您有value
vic
,并且您正在交换正在搜索的列以获取该值。在SQL中,我们用另一种方式做事情——我们的列是常量,我们的值是变化的。此外,IF在选择零件中完成,而不是在WHERE之后。从技术上讲,即使你绕开了以某种方式提出解决方案的问题,你的设计也毫无疑问是错误的。为了按照我们想要的方式做事情,我们使用规范化,它允许我们以各种方式查询数据(而且它总是有效的)。您的设计没有规范化。这有点苛刻,您不知道是什么情况导致数据被如此安排;据我们所知,它可能是一个继承的数据库。@pala_u2;-我不是在讨论是什么导致了设计如此,我只是强调了这种方法引起的问题。当人们以错误的方式使用工具时,坏事就会发生——就像这里一样。然后需要一个巨大的黑客来让它按预期工作,而唯一应该做的是一个简单而正确的数据模型构造。我不明白state1是表的state2列吗?谢谢你的反馈,但是@pala确实是正确的。数据库直接来自MYOB软件。谢谢你花时间告诉我我做错了什么。虽然这可以回答问题,但在你的答案中加入一些文字来解释你在做什么总是一个好主意。阅读。它也不能回答问题。
SELECT 
     * 
FROM 
    `Stockists` 
WHERE 
    IF(state1 = 'vic', state1 = 'vic' , (state1 = 'vic' OR state2 ='vic'))
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'
;