MySQLクエリでIFELSEステートメントを作成する方法


86

MySQLクエリでIFELSEステートメントを作成するにはどうすればよいですか?

このようなもの:

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

回答:


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。 action == 2 AND N.state == 0)THEN 1 ELSE 0 END)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

2
@DylanCrossN.idとの間のカンマが欠落している可能性があるようです(CASE WHEN ...
Jack Edmonds

1
ああ、それはわかりませんでしたが、カンマを入れても機能しません。
ディランクロス

@DylanCrossに変更AS N.stateする必要がある場合もありAS stateます。
ジャックエドモンズ2012年

8
@DylanCross MySQLは比較の=代わりに使用しません==か?
ジャックエドモンズ2012年

27

C / PHPスタイルではなくSQLで記述する必要があります

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;

両方の結果は同じになります...。


私が気付いたが、それに関するドキュメントを見つけることができなかったことの1つは、IFが列のリストの最後でなければならないということです。それが最初の場合、エラーが発生します。ドキュメントのどこでこれを見ることができるか知っている人はいますか?それは私を夢中にさせます。私が何かを発見したとき、私は将来の参考のためにそれが文書化されるのを見たいです
carinlynchin 2016年

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
ソリューションへのリンクは大歓迎ですが、それがなくても回答が役立つことを確認してください。リンクの周りにコンテキストを追加して、他のユーザーがそれが何であるか、なぜそこにあるのかを理解できるようにしてから、ページの最も関連性の高い部分を引用してください。ターゲットページが利用できない場合に再リンクします。リンクに過ぎない回答は削除される場合があります。
2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.