2009-02-26 15 views
8

द्वारा क्रम में बूलियन अभिव्यक्ति का उपयोग करते हुए मैं खंड है कि तरह लग रहा है से कोई ऐसा आदेश है:खंड

(user_id <> ?), rating DESC, title 

कहाँ? वर्तमान उपयोगकर्ता की आईडी के साथ प्रतिस्थापित किया गया है।

पोस्टग्रेस्क्ल पर यह मुझे वह आदेश देता है जो मैं वर्तमान उपयोगकर्ता द्वारा देख रहा हूं, फिर उच्चतम रेटिंग, फिर शीर्षक (वर्णानुक्रम)।

हालांकि MySQL पर मुझे एक अस्पष्ट आदेश मिलता है वर्तमान उपयोगकर्ता न तो पहले और न ही आखिरी है, न ही यह रेटिंग या शीर्षक से है।

क्या इस त्वरित और गंदे बुलियन अभिव्यक्ति को एक मामले के साथ बदलने के लिए क्रॉस डेटाबेस संगतता का मेरा एकमात्र विकल्प है .. फिर .. ELSE .. END कथन?

संपादित करें: सहायता के लिए धन्यवाद, यह कैओस और चाड बिर्च द्वारा सही ढंग से इंगित किया गया है कि समस्या कहीं और है (विशेष रूप से मैं उपरोक्त क्वेरी के परिणामों का उपयोग अगले इनपुट में कर रहा हूं - तो हैरान हूँ कि पहले के आदेश खो दिया है अभिनय;)

+0

यह ठीक काम करना चाहिए, मैं एक और समस्या की तलाश कर सकता हूं जो इसे उत्पन्न कर सकता है। अगर आप यह पुष्टि करना चाहते हैं कि यह सही मान दे रहा है (वर्तमान उपयोगकर्ता के लिए 0 होना चाहिए, 1 अन्यथा) –

उत्तर

1

मैं mysql में इस पर कई रूप से परीक्षण किया और वे सब सही ढंग से जिस तरह से आप उम्मीद कर रहे हैं) काम (। मुझे लगता है कि आपकी समस्या क्वेरी के अलावा कहीं और होनी चाहिए। अपने लिए सत्यापित करने के लिए, मैं सीधे mysql क्लाइंट से समकक्ष क्वेरी चलाने का सुझाव देता हूं।

3

आप एक

select (user_id <> ?), user_id 

कर देखने के लिए कि आप सही सही/गलत मूल्यों को दिखा रहा हो रही है की कोशिश कर सकते।

10

MySQL बूलियन्स का कोई असली धारणा है, और बस TRUE और FALSE संख्यात्मक मान 1 और 0 repectively को मैप करता है।

इस मामले में user_id <> ? आपकी तालिका में पंक्तियों की बहुमत के लिए 0 और अन्य पंक्तियों के लिए 1 लौटाएगा। डिफ़ॉल्ट सॉर्ट क्रम ASC है, सभी संभावना पंक्तियों आप चाहते हैं अपने परिणाम सेट की नीचे पर हैं में अर्थ (0/FALSE से पहले1/TRUEआते हैं)। इसे समायोजित करने के लिए अपनी क्वेरी को संशोधित करने का प्रयास करें।

(user_id <> ?) DESC, rating DESC, title 

मान लीजिए कि यह वास्तव में मुद्दा है, क्रॉस-डेटाबेस संगतता आसानी से हासिल की जा सकती है।

IF(user = ?, 0, 1), rating DESC, title 
+0

मुझे यह इंगित करना चाहिए कि मैं PostgreSQL के विशेष स्वाद से परिचित नहीं हूं एसक्यूएल। मैंने एक सरल IF() फ़ंक्शन का अस्तित्व माना है जैसा कि MySQL के मामले में है, लेकिन यदि यह अस्तित्व में नहीं है तो मैं क्षमा चाहता हूं और पाठक के लिए अभ्यास के रूप में उपयुक्त सुधार छोड़ दूंगा :) –

+0

यह अस्तित्व में नहीं है, लेकिन बस आपके पहले उदाहरण में काम करते हुए '(बूलियन अभिव्यक्ति) डीईएससी 'का उपयोग करना। – JacobEvelyn