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

जवाबों:


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 ELSE 0 END) के रूप में सूचना एन से N.state, पोस्ट P WHERE N.userID = '$ सत्र' और N.uniqueID = P.id और Pstate = '0' और N.action = '1' ORDER BY N.date DESC "
डायलन क्रॉस

2
आप की तरह लग रहा है @DylanCross के बीच में कॉमा अनुपलब्ध हो सकता है N.idऔर(CASE WHEN ...
जैक एडमंड्स

1
आह, यह नहीं देखा, लेकिन जब भी मैं अल्पविराम लगाता हूं तो यह काम नहीं करता है।
डायलन क्रॉस

@DylanCross आपको भी बदलने की आवश्यकता हो सकती AS N.stateहै AS 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 और N.state = 0, 1, 0) AS N.state FROM सूचनाएँ N, P WHERE N.userID = '$ session' और N.uniqueID = P.id और P.state = '0' और N.action = '1' ORDER BY N.date DESC
क्रॉस

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 क्वेरी की कॉलम सूची में है।


यह बेहतर उत्तर है
ब्रेटनर

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 को कॉलमों की सूची में अंतिम होना चाहिए। यदि यह पहले है, तो यह एक त्रुटि देता है। किसी को पता है कि इस दस्तावेज में कहां देखना है? यह मुझे पागल कर रहा है। जब मुझे कुछ पता चलता है, तो मैं इसे भविष्य के संदर्भ के लिए प्रलेखित देखना पसंद करता हूं
कारिनलिनचिन

8

mySQL संदर्भ पुस्तिका के अनुसार यदि और अन्य विवरण का उपयोग करने का यह सिंटैक्स है:

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
किसी समाधान का लिंक स्वागत योग्य है, लेकिन कृपया सुनिश्चित करें कि आपका उत्तर इसके बिना उपयोगी है: लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को यह पता चले कि यह क्या है और यह क्यों है, तो पृष्ठ के सबसे प्रासंगिक हिस्से को उद्धृत करें ' मामले में लक्ष्य पृष्ठ अनुपलब्ध होने पर पुनः लिंक करना। ऐसे लिंक जो किसी लिंक से बहुत कम हैं उन्हें हटाया जा सकता है।
मार्च
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.