Bir MySQL sorgusunda IF ELSE ifadesi nasıl yazılır


87

Bir MySQL sorgusunda bir IF ELSE ifadesini nasıl yazarım?

Bunun gibi bir şey:

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

Sonra dizimde bunu yapabilmeliyim:

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

Yanıtlar:


154

Muhtemelen bir CASEifade kullanmak istersiniz .

Şuna benziyorlar:

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

1
Teşekkürler, cevabınızı takip etmek daha kolay görünüyordu (vakanın sorguda nereye gideceğini varsayarsak, ancak doğru şekilde çalışmasını sağlayamadım: "SEÇİN *, N.id (CASE WHEN (N. action == 2 VE N.state == 0) SONRA 1 BAŞKA 0 SON) AS BİLDİRİMLERDEN N, P NEREDE N.userID = '$ oturum' VE N.uniqueID = P.id AND P.state = '0' VE N.action = '1' N.date DESC TARAFINDAN SİPARİŞ VER "
Dylan Cross

2
@DylanCross N.idve arasında virgül eksikmiş gibi görünüyor(CASE WHEN ...
Jack Edmonds

1
Ahh, görmedim ama virgül koyduğumda bile işe yaramıyor.
Dylan Çapraz

@DylanCross Ayrıca değişim gerekebilir AS N.stateiçin AS state.
Jack Edmonds

8
@DylanCross MySQL karşılaştırma =yerine kullanmıyor mu ==?
Jack Edmonds

29

C / PHP tarzında değil, SQL ile yazmalısın

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

sorguda kullanmak için

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

saklanan prosedürlerde veya işlevlerde kullanım için


Bunun kodumla çalışmasını sağlayamıyorum, belki yerleşimim yanlış veya başka bir şey: SELECT *, N.id IF (N.action = 2 AND N.state = 0, 1, 0) AS N.state FROM bildirimler N, gönderiler P NEREDE N.userID = '$ session' VE N.uniqueID = P.id AND P.state = '0' VE N.action = '1' SİPARİŞ N.date DESC
Dylan Cross

15

Aradığınız case:

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

MySQL'in bir ifsözdizimi ( if(action=2 and state=0, 1, 0)) vardır, ancak casedaha evrenseldir.

as stateYalnızca sütunun takma adının olduğunu unutmayın . Bunun SQL sorgunuzun sütun listesinde olduğunu varsayıyorum.


Bu çok daha iyi bir cevap
bretterer

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

VEYA

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

her iki sonuç da aynı olacak ....


Fark ettiğim ancak bununla ilgili belge bulamadığım bir şey, IF'nin sütun listesinde sonuncu olması gerektiğiydi. İlkse hata veriyor. Bunu belgelerde nerede göreceğini bilen var mı? Bu beni delirtiyor. Bir şey keşfettiğimde, ileride
başvurmak üzere

8

mySQL başvuru kılavuzuna göre bu, if ve else ifadesini kullanmanın sözdizimi:

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

Sorgunuzla ilgili olarak:

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

ya da kullanabilirsin

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

Bu bağlantıda iyi bir örnek var: http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/


2
Bir çözüme bağlantı memnuniyetle karşılanır, ancak lütfen cevabınızın o olmadan yararlı olduğundan emin olun: Bağlantının etrafına bağlam ekleyin, böylece kullanıcı arkadaşlarınız bunun ne olduğu ve neden orada olduğu konusunda fikir sahibi olurlar, ardından sayfanın en alakalı bölümünü alıntılayın ' hedef sayfanın mevcut olmaması durumunda yeniden bağlanma. Bir bağlantıdan biraz daha fazla olan cevaplar silinebilir.
MART
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.