如何在MySQL查询中编写IF ELSE语句


86

如何在MySQL查询中编写IF ELSE语句?

像这样:

mysql_query("...(irrelevant code).. IF(action==2&&state==0){state=1}");

然后在我的数组中,我应该能够做到这一点:

 $row['state'] 
//this should equal 1, the query should not change anything in the database, 
//just the variable for returning the information

Answers:


150

您可能要使用CASE表达式

他们看起来像这样:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;

1
谢谢,您的回答似乎更容易理解,(就查询中的情况而言,但是我无法使其正常工作:“ SELECT *,N.id(CASE WHEN(N.动作== 2并且N.state == 0)然后1否则0结束)作为N.state从通知N,发布P WHERE N.userID ='$ session'AND N.uniqueID = P.id AND P.state = '0'AND N.action ='1'ORDER BY N.date DESC“
Dylan

2
@DylanCross看来您可能在N.id和之间缺少逗号(CASE WHEN ...
Jack Edmonds

1
啊,没看到,但是即使我输入逗号也不起作用。
Dylan Cross'1

@DylanCross您可能还需要更改AS N.stateAS state
杰克·埃德蒙兹

8
@DylanCross MySQL不使用=而不是==进行比较吗?
杰克·埃德蒙兹

27

您必须使用SQL而不是C / PHP样式编写它

IF( action = 2 AND state = 0, 1, 0 ) AS state

用于查询

IF ( action = 2 AND state = 0 ) THEN SET state = 1

用于存储过程或函数


我无法使它与我的代码一起使用,也许我的位置是错误的,或诸如此类:SELECT *,N.id IF(N.action = 2 AND N.state = 0,1,0)AS N.state FROM通知N,发布P WHERE N.userID ='$ session'AND N.uniqueID = P.id AND P.state ='0'AND N.action ='1'ORDER BY N.date DESC
Dylan Cross

15

您正在寻找case

case when action = 2 and state = 0 then 1 else 0 end as state

MySQL具有if语法(if(action=2 and state=0, 1, 0)),但case通用性更高。

请注意,as state这里只是别名列。我假设这在您的SQL查询的列列表中。


这是一个更好的答案
bretterer 2013年

15
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

要么

SELECT col1, col2, (case when (action = 2 and state = 0) then 1 else 0 end) as state from tbl1;

两种结果将相同。


我注意到的一件事,但是找不到相关文档,因为IF必须是列列表中的最后一个。如果是第一个,则给出错误。有人知道在文档中的什么位置吗?这让我疯狂。当我发现一些东西时,我希望看到它记录下来以备将来参考
carinlynchin

8

根据mySQL参考手册,这是使用if和else语句的语法:

IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

因此,关于您的查询:

x = IF((action=2)&&(state=0),1,2);

或者你可以使用

IF ((action=2)&&(state=0)) then 
state = 1;
ELSE 
state = 2;
END IF;

这个链接有一个很好的例子:http : //easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


2
欢迎使用指向解决方案的链接,但是请确保没有该链接的情况下,您的回答是有用的:在该链接周围添加上下文,以便您的其他用户可以了解它的含义和含义,然后引用您所使用页面中最相关的部分如果目标页面不可用,请重新链接。只是链接的答案可能会被删除。
MAR
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.