2009-07-03 18 views
9

मैं एक MySQL तालिका है निम्न डेटा के साथ (सरलीकृत) करने के लिए निश्चित मूल्यों सॉर्ट:शीर्ष

INSERT INTO `stores` (`storeId`, `name`, `country`) VALUES 
(1, 'Foo', 'us'), 
(2, 'Bar', 'jp'), 
(3, 'Baz', 'us'), 
(4, 'Foo2', 'se'), 
(5, 'Baz2', 'jp'), 
(6, 'Bar3', 'jp'); 

अब, मैं दुकानों की एक पृष्ठवार सूची है कि ग्राहकों को देश के साथ शुरू होता प्राप्त करने में सक्षम होना चाहता हूँ।

उदाहरण के लिए, एक अमेरिकी ग्राहक निम्न सूची देखेंगे:

Foo 
Baz 
Bar 
Foo2 
Baz2 
Bar3 

अनुभवहीन समाधान मैं अभी उपयोग कर रहा हूँ (एक अमेरिकी ग्राहक और पृष्ठ आकार 3 के साथ उदाहरण):

(SELECT * FROM stores WHERE country = "us") UNION (SELECT * FROM stores WHERE country != "us") LIMIT 0,3 

क्या ऐसा करने के कोई बेहतर तरीके हैं? इस्तेमाल किया जा सकता है और शीर्ष पर एक निश्चित मूल्य डालने के लिए कहा जा सकता है?

उत्तर

15

इस प्रयास करें:

SELECT * FROM stores ORDER BY country = "us" DESC, storeId 
+0

आह, यह वही है जो मैं ढूंढ रहा था, धन्यवाद – truppo

1

आप एक देश के प्रत्येक मान अंकीय के साथ एक मामले के साथ लिंक करने के लिए, है:

select * 
from stores 
order by case when country = "us" then 1 
       else 0 
     end desc 
1

देश कोड और आदेशों की एक तालिका बनाएं, यह करने के लिए अपने प्रश्न में आदेश देश से शामिल होने, और उसके बाद कोड का आदेश

तो तुम एक मेज है कि लग रहा है के लिए होता है जैसे

CountryOrder 

Code Ord 
---- --- 
us 1 
jp 2 
se 3 

और उसके बाद कोड है कि लगता है कि:

SELECT s.* 
FROM Stores s 
INNER JOIN CountryOrder c 
    ON c.Code = s.Country 
ORDER BY c.Ord; 
1

कैसे IF का उपयोग कर अमेरिका पंक्तियों को शीर्ष मान देना के बारे में।

select if(country_cd='us,'aaaUS',country_cd) sort_country_cd, country_cd from stores Order by sort_country_cd 

यह आपको sort_country_cd नामक एक छद्म कॉलम देगा। यहां आप "यूएस" को "aaaUS" में मैप कर सकते हैं। JP अभी भी JP पर मैप किया जा सकता है।

जो यूएस को आपकी तरह की सूची के शीर्ष पर रखता है।

+0

चयन COUNTRY_CODE, COUNTRY_NAME देश आदेश से, अगर (COUNTRY_CODE ('सीए' में , 'यूएस'), 0,1), देश_नाम –

4

पहले की खोज के लिए देश पाने के लिए, और वर्णानुक्रम शेष:

SELECT * 
FROM stores 
ORDER BY country = 'us' DESC, country ASC