2010-10-07 9 views
7

उन देशों की एक सूची में जिन्हें वर्णमाला क्रम में प्रदर्शित करने की आवश्यकता है, आपको सूची के शीर्ष पर संयुक्त राज्य अमेरिका को रखने की आवश्यकता है। आप यह कैसे करेंगेएक ड्रॉप डाउन सूची में आप एक विशिष्ट देश को शीर्ष पर कैसे रखेंगे?

मैंने यह कहते हुए जवाब दिया कि मेरे पास एक टेबल संरचना होगी जिस तरह से अमेरिका आईडी -0 पर है। शेष देश अपने वर्णमाला क्रम में सूचीबद्ध हैं।

तो जब मैं मेज से लाने, मुझे क्या करना होगा एक "SELECT CountryName from tableOfCountries ORDER by ID"

मुझे यकीन है कि अगर साक्षात्कारकर्ता इस सुनना चाहते थे नहीं कर रहा हूँ। इसलिए मैंने अमेरिका के साथ पहले तत्व के रूप में देश के सरणी को पॉप्युलेट करने का एक और विकल्प सुझाया। फिर शेष तत्व क्वेरी के परिणाम से पॉप्युलेट हो जाएंगे।

"SELECT CountryName FROM tableOfCountries WHERE countryName != 'US' ORDER by COUNTRY_NAME". 

यह सुनिश्चित करेगा कि अमेरिका दो बार नहीं चुना जाएगा।

साक्षात्कारकर्ता इस विकल्प से संतुष्ट नहीं था। तो उसने मुझसे पूछा कि क्या मेरे मन में कोई अन्य विकल्प था। तब मैंने वेबसर्वर पर मूल्यों की सूची के साथ एक टेक्स्ट फ़ाइल कहा।

क्या आपके पास कोई अन्य विकल्प है जिसके बारे में आप सोच सकते हैं?

+5

उन्हें बताओ ऐसा नहीं होने के लिए यूएस-केंद्रित ;-) –

+0

आदेश से बाहर की गई कुछ प्रविष्टियों के साथ वर्णमाला सूची के रूप में परेशान करने वाला और बहुत कम है। एक उपयोगकर्ता अपने देश के लिए मध्य में देखकर काफी समय बर्बाद कर सकता है। यदि आप शीर्ष पर एक सूची चाहते हैं, तो इसे ** डुप्लीकेट ** की सूची बनाएं और ** ** ** प्रविष्टियों की सूची नहीं। – Quentin

+0

@ डेविड, वह जवाब शायद साक्षात्कारकर्ता को परेशान करेगा। – abhi

उत्तर

8

आम तौर पर कुछ की तरह:

SELECT 
    CountryName 

from tableOfCountries 

ORDER by 
    (case when CountryName = 'US' then 0 
    else 1 end) asc, CountryName asc 
+0

मैं देश नाम पर केस स्टेटमेंट का आधार नहीं लगाऊंगा। क्या होगा यदि बाद में आप नाम को 'संयुक्त राज्य' में बदलना चाहते हैं। क्या आप इसे केस स्टेटमेंट में बदलना याद रखना चाहते हैं? – kevev22

+1

@ केवेव 22: फिर प्राथमिक कुंजी से इसे आधार दें, या मान लें कि नाम नहीं बदलेगा। हां, यह मूल्य को स्टोर करने के लिए वास्तविक तालिका को संशोधित करने से अधिक भंगुर है, लेकिन इस दृष्टिकोण को तालिका संरचना में कोई बदलाव की आवश्यकता नहीं है (जो कोई समस्या हो सकती है या नहीं)। –

+1

@ केवेव 22: इसके अतिरिक्त, यह दृष्टिकोण आपको विभिन्न परिस्थितियों में अलग-अलग "डिफ़ॉल्ट" मान रखने के लिए लचीलापन भी देता है (कहें, यह यूएस के बजाय उपयोगकर्ता के घर देश में डिफ़ॉल्ट है)। ऐसा लगता है कि यह वैश्विक डिफ़ॉल्ट देश या देशों को बदलने के लिए होगा। –

3
शायद

:

select name from countries 
order by case when name = 'US' then 1 else 2 end, name; 
10

देश तालिका में एक और पूर्णांक स्तंभ पूर्वता कहा जाता है।

असाइन संयुक्त राज्य अमेरिका एक पूर्वता 1 से अधिक और 0.

आपका एसक्यूएल में अन्य सभी देशों को छोड़ तो ऐसा दिखाई देगा:

select Name from countries 
order by precedence desc, name asc 

यह आप बाद में इस पैमाने पर करने के यदि आवश्यकता हुई की अनुमति देगा।

+0

यदि बाद में इसकी आवश्यकता हो तो इसके बजाय क्षेत्र को जोड़ने का क्या फायदा होगा (जो थोड़ा असंभव लगता है)? –

+2

@Adam: आपको ऐसा क्यों लगता है कि यह असंभव है? यदि ओपी का ग्राहक आधार फैलता है ताकि अन्य देश प्रमुख ग्राहक भी हों, तो कोई भी उन देशों को सूची के शीर्ष पर रखना चाह सकता है। जैसे मैं अक्सर शीर्ष पर रैंक किए गए कई देशों के साथ ड्रॉप-डाउन देखता हूं, उदा। संयुक्त राज्य अमेरिका, कनाडा, यूनाइटेड किंगडम, फ्रांस, जर्मनी, और उसके बाद ही अन्य सभी देशों ने वर्णानुक्रम का आदेश दिया है। – Ether

+0

@ अन्य: मुझे लगता है कि अल्प अवधि में विचार करना असंभव है। अगर कॉलम को बाद में बनाम जोड़ने का कोई फायदा नहीं है, तो इसे आवश्यक होने से पहले इसे जोड़ना अधिक इंजीनियरिंग है (हालांकि यह मामूली हो सकता है)। –

3

मैं निश्चित रूप से आईडी से दुर्व्यवहार नहीं करता अगर मैं इससे बच सकूं।

एक देशों के लिए प्राथमिकताओं और फिर दे सकता है:

select isoCode, name from countries order by priority desc, name 

वैकल्पिक रूप से, कारण है कि यह शीर्ष पर है? मैं तर्क को बदलने का सुझाव दूंगा ताकि वे वर्णानुक्रम में बने रहे, लेकिन अमेरिका बदलने तक डिफ़ॉल्ट चयन था।

-1

यदि यह सी # में है, तो यह देखते हुए कि डेटा सर्वर से वापस कैसे आता है, उन्हें एक विशिष्ट प्रकार में रखकर और दिए गए प्रकार पर आईसीओम्पेर्बल को कार्यान्वित करना। ड्रॉप डाउन तब उन्हें तदनुसार रखेगा जैसा कि आप तुलनात्मक विधि में निर्दिष्ट कर सकते हैं कि अमेरिकी प्रकार दूसरे देशों का "बड़ा" है।

class Country : IComparable<Country> 
{ 
    int IComparable<Country>.CompareTo(Country other) 
    { 
     <US logic> 
     else 
      return String.Compare(this.CountryName, other.CountryName); 
    } 
} 

संपादित करें: वास्तव में इस ओपी के टैग के आधार पर सी # में है। प्रस्तुतिकरण के लिए पीछे के अंत पर ध्यान क्यों दिया जा रहा है मेरे बाहर है।

+0

एर, नहीं। कोई डाटाबेस नियंत्रण नहीं है जो तुलनात्मक परिणाम के आधार पर स्वचालित रूप से डेटा स्रोत में तत्वों को सॉर्ट करेगा। –

+0

@Adam कहीं भी कोई संदर्भ नहीं है जो इन राज्यों को डेटाबेस होने की आवश्यकता है। इस मामले के साथ, ऑब्जेक्ट्स को एक क्रमबद्ध कंटेनर में रखकर आईसीओपरपेबल कार्यान्वयन का उपयोग किया जाएगा और सॉर्ट() को कॉल करने पर जो भी वांछित है उसे करें। तथ्य के बाद उस संग्रह के साथ जो कुछ भी किया जाता है, इससे कोई फर्क नहीं पड़ता; उदाहरण के लिए इसे कॉम्बोबॉक्स में बाध्य करना। यह बैक एंड पर ऐसा करने के बाद अलग नहीं है और उस संग्रह को यूआई को दिए गए नियंत्रण में प्रदर्शित करने के लिए दबा रहा है। यदि हम विशिष्ट .NET तकनीकों से बात करते हैं तो आप संग्रह दृश्य का भी उपयोग कर सकते हैं। –

1

ऐसा करने का एक और तरीका राज्यों की अपनी सूची प्राप्त करना होगा और फिर डिफ़ॉल्ट आइटम को छोड़कर उन्हें डेटाव्यू में फ़िल्टर करना होगा। फिर सूची नियंत्रण संपत्ति AppendDataBoundItems को सत्य पर सेट करें। अपने आइटम सूची नियंत्रण में जोड़ें और फिर डेटाव्यू में डेटाबेस करें।

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.appenddatabounditems.aspx

यह आपके डिफ़ॉल्ट मान समाशोधन नहीं जब DataBind होता है के प्रभाव पड़ेगा।

1

हाय मैं इस लेख पाया, आशा है यह आप यू सवाल स्पष्ट करने में मदद करता है: http://www.nexustechnologiesllc.com/blog/fixing-registration-forms-country-selection/

मैं, नौसिखिया हूँ मुझे माफी माँगता हूँ अगर मैं उचित प्रारूप में सवाल का जवाब नहीं है

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