2013-04-04 19 views
5

है तो मैं पूरे कॉलम को चेक करें यदि मैं audio कॉलम के लिए सभी पंक्तियां खाली हैं तो मैं सशर्त रूप से स्विच करना चाहता हूं। मैंने GROUP BY प्रकार के साथ प्रयास किया है लेकिन काम नहीं करता है।MySQL: यदि किसी भी पंक्ति का मूल्य

SELECT postid, title, has_audio, audio, type 
    FROM qa_posts 
    WHERE parentid=1 

enter image description here

तो कोड एक से नहीं करता है, तो कोड बी

उत्तर

6

निष्पादित कि अगर ऑडियो कि पैरेंट आईडी के लिए संपूर्ण स्तंभ के लिए मौजूद हैं तुम बस count सभी पंक्तियों जिसके लिए audioNULL नहीं है सकता है। लेकिन यदि आपकी मेज बड़ी है और इसमें कई पंक्तियां हैं। तो इस दृष्टिकोण के साथ वास्तविक समस्या यह है कि ऐसी क्वेरी डीबी के लिए महंगा हो सकती है और कम से कम धीमी हो सकती है। बेशक समय से पहले अनुकूलन बुरी बात है, लेकिन इस मामले में नहीं है - हम दृष्टिकोण अनुकूलन करने के लिए जा रहे हैं, नहीं कोड :)

ऑडियो स्तंभ के लिए सशर्त स्विच करने के लिए करता है, तो सभी पंक्तियों खाली हैं चाहते

सबसे पहले, यह प्रश्न are all rows' audio column empty? पर विचार करना अच्छा होगा, यह वास्तव में सही है। और नहीं। यह नहीं है :) वास्तव में आपको how many of rows are not null और न ही are all rows' audio column empty? जानने की आवश्यकता है क्योंकि यह पूरी तरह से आपकी स्थिति के लिए अप्रासंगिक है, यदि 5, 10 या 100000 है। आपको क्या करना चाहिए प्रश्न को "फ़्लिप" करना और if there's any row that is NOT null? जैसे प्रश्न के उत्तर की तलाश करना है। और यहां तक ​​कि दोनों प्रश्न भी पहली नज़र में समान दिखते हैं, हम उत्तर पाने के लिए डेटाबेस का उपयोग कर रहे हैं, इसलिए यह वास्तव में संपूर्ण गेम परिवर्तक है।

तर्क के आधार पर if there's any row that is NOT null? सवाल यह सिर्फ यह पता लगाने के लिए पर्याप्त है जवाब देने के लिए अगर वहाँ कम से कम एक audio जा रहा है NOT NULL साथ पंक्ति। "कम से कम" चीज हमें क्वेरी में कुछ बाधाओं को लागू करने की अनुमति देती है, क्योंकि 1 अच्छी तरह से "कम से कम एक" स्थिति को पूरा करता है, हम एसक्यूएल LIMIT 1 का उपयोग करेंगे, जो डीबी को रोक देगा और परिणाम को वापस लौटाएगा जैसे ही यह पहला रिकॉर्ड मिल जाएगा क्वेरी, w/o पूरी मेज के माध्यम से जाने की जरूरत है। यह बस तेज होना चाहिए, और कम संसाधन भूखा होना चाहिए।

एक बार निष्पादित हो जाने पर, हमारी क्वेरी दो परिणाम लौटा सकती है। या तो हमें कुछ भी नहीं मिला (शून्य पंक्तियां लौटाई गईं), जिसका अर्थ है कि सभी audioNULL हैं या इसके विपरीत, हमें कुछ मिलता है (एकल पंक्ति, कोई फर्क नहीं पड़ता) जिसका अर्थ है if there's any row that is NOT null? प्रश्न का उत्तर है 'हाँ, यह है '(क्योंकि कम से कम एक लौटा है)।

+0

लेकिन इस छवि में तरह NOT NULL पंक्तियों के लिए सरल जांच केवल 3 पंक्तियों जो 10 या 15 या अधिक .. उस मामले में क्या हो सकता है? मैं सिर्फ यह जांचना चाहता हूं कि पैरेंट आईडी के लिए कोई ऑडियो फ़ील्ड उपलब्ध है या नहीं। यदि कोई एकल फ़ील्ड सत्य नहीं होने से शून्य नहीं है। कोई उपाय? – Artist

+0

अपने चयन परिणामों को अपनी मूल आईडी को 'WHERE parentid = 1' –

+0

वेबनेटमोबाइल के साथ साझा करने के लिए बस संकीर्ण करें। मेरा से बेहतर जवाब। सर्वर लोड को कम करने के लिए उपस्थित होने के लिए सबसे अच्छा, यहां तक ​​कि छोटी चीजों के साथ, ताकि आप इसकी आदत में हों। –

2

के लिए select count(*) के साथ एक चयन कथन करें। फिर आपको प्राप्त संख्या के आधार पर एक सशर्त कथन करें। सुनिश्चित करें कि ऑडियो अनुक्रमित है।

+0

यह भी अच्छा विचार है .. आपका मतलब है कि अगर गिनती है> 0 सच से .. सही? – Artist

+0

यह खराब दृष्टिकोण है - मैंने अपने जवाब में एक नोट क्यों बनाया। –

+0

मैं देखता हूं लेकिन मैं सिर्फ यह जांचना चाहता हूं कि किसी भी फ़ील्ड में केवल दो शर्त है या वास्तविक गणना नहीं है। तो कुछ 'जैसे (ऑडियो == 0) {कुछ भी नहीं}} {यह करें} ' – Artist

1

आप कर सकते हैं

SELECT * FROM `table` WHERE column IS NOT NULL AND column <> '' 
संबंधित मुद्दे