如何在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
您可能要使用case表达式。
他们看起来像这样:
谢谢,您的回答似乎更容易理解,(就查询中的情况而言,但是我无法使其正常工作:" SELECT *,N.id(CASE WHEN(N.动作== 2 AND N.state == 0)然后1否则0结束)AS N.state从通知N,在P. N.userID = $ session AND N.uniqueID = P.id AND P.state = 0 AND中发布N.action = 1 ORDER BY N.date DESC"
@DylanCross看起来您可能缺少N.id和(CASE WHEN ...之间的逗号
啊,没看到,但是即使我把逗号也没用。
@DylanCross您可能还需要将AS N.state更改为AS state。
是的,我也看到了,但仍然无法正常工作。 :|
@DylanCross您得到的错误是什么?
您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以使用在== 2 AND N.state == 0附近使用正确语法的正确语法,然后1 ELSE 0 END)AS状态FROM通知N,在第1行张贴P
@DylanCross MySQL是否使用=而不是==进行比较?
是的,我刚刚更改了这些内容,并且看起来很正常,只要不返回错误,我想我现在要做的只是处理查询,因为它是我试图完成的复杂工作。感谢您对我的问题的帮助。
您必须使用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
您正在寻找case:
MySQL具有if语法(if(action=2 and state=0, 1, 0)),但是case更通用。
请注意,as state只是对该列进行别名。 我假设这在您的SQL查询的列列表中。
这是一个更好的答案
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;
要么
两种结果将相同。
我注意到但无法找到文档的一件事是,IF必须是列列表中的最后一个。如果是第一个,则给出错误。有人知道在文档中的哪里吗?这让我疯狂。当我发现某些东西时,我希望看到它记录下来以备将来参考
根据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/
欢迎使用指向解决方案的链接,但请确保没有它的答案是有用的:在链接周围添加上下文,以便您的其他用户可以了解解决方案的含义和原因,然后引用您所链接的页面中最相关的部分以防目标页面不可用。只是链接的答案可能会被删除。