Bagaimana cara menulis pernyataan IF ELSE dalam kueri MySQL

87

Bagaimana cara menulis pernyataan IF ELSE di kueri MySQL?

Sesuatu seperti ini:

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

Kemudian di dalam array saya, saya harus bisa melakukan ini:

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

Jawaban:

152

Anda mungkin ingin menggunakan CASEekspresi .

Mereka terlihat seperti ini:

SELECT col1, col2, (case when (action = 2 and state = 0) 
 THEN
      1 
 ELSE
      0 
 END)
 as state from tbl1;
Jack Edmonds
sumber
1
Terima kasih, jawaban Anda tampaknya lebih mudah diikuti, (sejauh mana kasus seharusnya masuk dalam kueri, namun saya tidak dapat membuatnya berfungsi dengan baik: "SELECT *, N.id (KASUS KAPAN (N. action == 2 DAN N.state == 0) LALU 1 ELSE 0 END) SEBAGAI N. state DARI notifikasi N, tulisan 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
@DylanCross Sepertinya Anda mungkin kehilangan koma antara N.iddan(CASE WHEN ...
Jack Edmonds
1
Ahh, tidak melihatnya, tetapi bahkan ketika saya meletakkan koma itu tidak berhasil.
Dylan Cross
@DylanCross Anda mungkin juga perlu mengubah AS N.stateke AS state.
Jack Edmonds
8
@DylanCross Tidak menggunakan MySQL =sebagai pengganti ==untuk perbandingan?
Jack Edmonds
29

Anda harus menuliskannya dalam SQL, bukan gaya C / PHP

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

untuk digunakan dalam kueri

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

untuk digunakan dalam prosedur atau fungsi tersimpan

SergeS
sumber
Saya tidak dapat membuatnya berfungsi dengan kode saya, mungkin penempatan saya salah, atau sesuatu: SELECT *, N.id IF (N.action = 2 AND N. state = 0, 1, 0) AS N. state FROM notifikasi N, kiriman 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

Anda sedang mencari case:

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

MySQL memiliki ifsintaks ( if(action=2 and state=0, 1, 0)), tetapi caselebih universal.

Perhatikan bahwa as stateada hanya kolom aliasing. Saya berasumsi ini ada di daftar kolom kueri SQL Anda.

Eric
sumber
Ini adalah jawaban yang jauh lebih baik
bretterer
15
SELECT col1, col2, IF( action = 2 AND state = 0, 1, 0 ) AS state from tbl1;

ATAU

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

kedua hasil akan sama ....

Khandad Niazi
sumber
satu hal yang saya perhatikan tetapi tidak dapat menemukan dokumentasi tentang itu adalah bahwa IF harus menjadi yang terakhir dalam daftar kolom. Jika yang pertama, maka itu memberikan kesalahan. Adakah yang tahu di mana melihat ini di dokumentasi? Ini membuatku gila. Ketika saya menemukan sesuatu, saya ingin melihatnya didokumentasikan untuk referensi di masa mendatang
carinlynchin
8

menurut manual referensi mySQL ini sintaks menggunakan pernyataan if dan else:

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

Jadi tentang pertanyaan Anda:

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

atau Anda bisa menggunakan

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

Ada contoh bagus di tautan ini: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

Dilraj Singh
sumber
2
Tautan ke solusi diperbolehkan, tetapi harap pastikan jawaban Anda berguna tanpanya: tambahkan konteks di sekitar tautan sehingga sesama pengguna Anda akan tahu apa itu dan mengapa itu ada, kemudian kutip bagian paling relevan dari halaman Anda ' menautkan ulang jika halaman target tidak tersedia. Jawaban yang tidak lebih dari sebuah tautan dapat dihapus.
MAR