2010-11-14 13 views
7

यह सुनिश्चित नहीं है कि किसी अन्य प्रश्न के साथ एक एसक्यूएल क्वेरी कितनी दूर जा सकती है।mysql IF अन्य स्टेटमेंट

चयन amount, transtype से transactions

transtype स्तंभ संख्या होने जा रहा है:

मैं एक साधारण SELECT कथन है।

उदाहरण के लिए, 1 = बिक्री, 2 = धनवापसी, 3 = त्रुटि, 4 = रद्द, 5 = कुछ और .... और इसी तरह।

तो, कुछ भी जटिल नहीं है। लेकिन सूची रिपोर्टिंग कारणों के लिए बढ़ती जा रही है। जो ठीक है

एक विशिष्ट क्वेरी के लिए मैं काम कर रहा हूं, क्या उस कॉलम को 2 या तीन निर्दिष्ट संख्याओं या टेक्स्ट में से एक के रूप में निकालने का कोई तरीका है?

उदाहरण के लिए, कुछ ट्रैनस्टीप संख्याएं 'हानि' होती हैं, जबकि अन्य 'लाभ' होते हैं, और शायद अन्य 'तटस्थ' होते हैं।

मैं उस कॉलम को केवल 3 के साथ निकालना चाहता हूं, HTML तालिका के अंदर PHP का उपयोग किए बिना मैं पंक्तियों को फेंक रहा हूं।

यदि मेरी व्याख्या स्पष्ट नहीं है, तो माफी माँगती है। थूकना मुश्किल था।

+0

आप अपने ट्रैनस्टेप मानों को या तो हानि, लाभ या तटस्थ होने के रूप में वर्गीकृत करना चाहते हैं? –

उत्तर

3

उपयोग MySQL CASE() समारोह:

TRANSACTION_TYPES 
transtype | number 
label  | varchar(32) 

फिर शामिल होने के शामिल करने के लिए आपकी क्वेरी को संशोधित। यदि सूची बड़ी हो रही है, तो आपको दूसरी तालिका का उपयोग करना चाहिए और उनसे जुड़ना चाहिए।

उदाहरण:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 
2

लेनदेन प्रकार वाले किसी अन्य तालिका के विरुद्ध जुड़ने का प्रयास करें। की तरह कुछ: तर्क की एक निश्चित संख्या के लिए

select t.amount, t.transtype, l.label 
    from transactions.t 
    join transaction_types l on t.transtype = l.transtype; 
+0

मैं अतिरिक्त तालिका से दूर रहने की कोशिश कर रहा था। मैं ट्रांस्पेप 10 से अधिक संख्याओं में बढ़ने की उम्मीद नहीं करता हूं। लेकिन आप सही हैं, यह एक त्वरित समाधान है। – coffeemonitor

+0

यह डेटाबेस की संबंधपरक अखंडता को भी संरक्षित रखेगा, ताकि आप विशिष्ट क्वेरी के बिना अपने जादू संख्याओं को "समझाने" के बारे में समझ सकें। –

0

ELT समारोह चाल करना चाहिए:

SELECT ELT(`transtype`, 'loss', 'loss', 'gain', 'neutral', …) FROM … 
नहीं

बहुत ही सुंदर है, हालांकि, और तार्किक मैं इस दृश्य तर्क में डेटाबेस तर्क करते हैं, करेंगे।

0

आपको उस कॉलम के लिए शायद ENUM type का उपयोग करना चाहिए। यह 64 मानों तक सीमित है, हालांकि यदि आपको अधिक आवश्यकता होगी तो आपको क्वेरी में एक नई तालिका और JOIN बनाना चाहिए।

संबंधित मुद्दे