MySQL

2010-06-27 10 views
5

PHP और MySQL का उपयोग करके यूनियन में प्रत्येक चयन के लिए अलग ऑर्डर, क्या यूनियन में प्रत्येक चयन कथन के लिए एक अलग ऑर्डर बीई का उपयोग करने का कोई तरीका है?MySQL

SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5 
UNION ALL 
SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10 

उपर्युक्त कथन काम नहीं करता है। ऐसा लगता है कि आप अंतिम परिणाम सेट पर केवल ऑर्डर कर सकते हैं। क्या पहले चयन पर ऑर्डर करने का कोई तरीका है तो यूनियन का उपयोग करके दूसरे चयन पर एक अलग ऑर्डर?

+2

आप जोश डेविस द्वारा हाल ही में स्वीकृत उत्तर में दिखाए गए कोष्ठक का उपयोग क्यों नहीं करते हैं (देखें http://stackoverflow.com/questions/3128159/multiple-where-with- सीमा-mysql/3128169 # 3128169)? वे पूरे कथन का अर्थ बदलते हैं। – Gumbo

उत्तर

8
(SELECT * FROM the_table WHERE color = 'blue' ORDER BY price ASC LIMIT 5) 
UNION ALL 
(SELECT * FROM the_table WHERE color = 'red' ORDER BY RAND() LIMIT 10) 
8

कृपया ध्यान दें कि यदि आप LIMIT निर्दिष्ट नहीं करते हैं तो यह काम नहीं करता है (हालांकि आप एक बहुत बड़ी डमी सीमा निर्दिष्ट कर सकते हैं)। Mysql प्रलेखन देखें (13.2.7.3। यूनियन सिंटेक्स):

"अलग-अलग चयन विवरणों के लिए ऑर्डर का उपयोग उस क्रम के बारे में कुछ भी नहीं है जिसमें अंतिम परिणाम में पंक्तियां दिखाई देती हैं क्योंकि डिफ़ॉल्ट रूप से यूनियन पंक्तियों का एक अनियमित सेट उत्पन्न करता है। .. "यूनियन में पंक्तियों का कारण बनने के परिणामस्वरूप प्रत्येक चयन के बाद प्रत्येक चयन द्वारा पुनर्प्राप्त पंक्तियों के सेट शामिल होते हैं, प्रत्येक चयन में एक अतिरिक्त कॉलम का चयन करें ताकि एक प्रकार कॉलम के रूप में उपयोग किया जा सके और अंतिम चयन के बाद ऑर्डर जोड़ें:

"(1 चुन sort_col, col1a, col1b, ... t1 से) यूनिअन sort_col द्वारा (चयन 2, col2a, col2b, ... t2 से) आदेश, अतिरिक्त individu भीतर सॉर्ट क्रम बनाए रखने के लिए अल चयन परिणाम, एक माध्यमिक स्तंभ क्रम में BY खंड जोड़ें: (col1a, col1b, 1 का चयन के रूप में sort_col, ... t1 से)

" यूनिअन (चयन 2, col2a, col2b, ... से t2) sort_col, col1a द्वारा आदेश; "