2010-04-10 12 views
17

मेरे क्वेरी स्ट्रिंग है जैसे:शर्तों के क्रम में MYSQL क्वेरी परिणाम ORDER कैसे बनाएं?

SELECT ... FROM maintable 
LEFT JOIN table1 on (maintable.id = table1.idx) 
LEFT JOIN table2 on (table1.idy = table2.idy) 
LEFT JOIN table3 on (table2.idz = table3.idz) 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 

//condition1 & condition2 & condition3 are kind of 
table3.idz = 101, table3.idz = 3, maintable.id IN (1,2,3,4), and so on 

परिणामों के लिए मैं प्रविष्टियों प्रविष्टियों condition2 मिलते हैं, और अंत में प्रविष्टियों को condition3 को पूरा पूरा condition1 पहले लौटा दी है, तो चाहते हैं। कोई विचार?

+1

क्या आपकी परिस्थितियां अलग हैं? यदि नहीं, तो क्या होगा यदि कोई प्रविष्टि एकाधिक स्थितियों को पूरा करती है? उदाहरण के लिए, यदि कोई प्रविष्टि शर्तों 1 और 3 को पूरा करती है, तो उसे 1 और 2 शर्तों को पूरा करने वाली प्रविष्टि की तुलना में क्रमबद्ध कैसे किया जाना चाहिए? –

+0

यहां कोई प्रतिबंध नहीं है, इसलिए मुझे लगता है कि पहले पहली बार वापसी होगी? – Edward

उत्तर

24

के लिए आप चाहते हैं क्रम में छंटाई प्राप्त करने के लिए आदेश देकर अपनी शर्तों का उपयोग, लेकिन उनके पीछे DESC का उपयोग करें।

SELECT * 
FROM person 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 
ORDER BY 
    condition1 DESC, 
    condition2 DESC, 
    condition3 DESC 

यदि यह क्योंकि आपकी क्वेरी अधिक जटिल है काम नहीं करता है, तो आप बूलियन तर्क (A AND D) OR (B AND D) OR (C AND D) में अपनी क्वेरी (A OR B OR C) AND D बदलने के लिए उपयोग कर सकते हैं तो आप निम्न क्वेरी का उपयोग कर सकते हैं:

SELECT * 
FROM person 
WHERE (condition1 OR condition2 OR condition3) 
AND maintable.status = static 
ORDER BY 
    condition1 AND static DESC, 
    condition2 AND static DESC, 
    condition3 AND static DESC 

AND static यहां जरूरी नहीं है क्योंकि सभी पंक्तियां इसे वापस कर देती हैं, लेकिन एक अधिक जटिल उदाहरण में (जहां आप कुछ पंक्तियां भी लौटती हैं जो स्थैतिक नहीं हैं) तो आपको इसे इस तरह से करना होगा।

+1

+1 अपडेट किया है कि 'डीईएससी' की आवश्यकता है! –

+0

हालत के बारे में कैसे (मेरे पास मेरी क्वेरी स्ट्रिंग अपडेट है) table.id = 123 की तरह है? मैंने वाक्य से आदेश दिया है, लेकिन कोई प्रभाव नहीं है। – Edward

+0

@Relax: मैंने जो उदाहरण दिया था वह ठीक काम करेगा। मैंने इसे वैसे भी अपडेट किया है क्योंकि मुझे लगता है कि आपकी वास्तव में पूछताछ अधिक जटिल है, जिससे आप हमें जान सकेंगे। –

7

यह काम करना चाहिए:

ORDER BY condition1, condition2, condition3 

उदाहरण

ORDER BY (weight > 500), (height > 3), (height < 2) 
+0

धन्यवाद, लेकिन यह काम नहीं कर रहा है, ऐसा इसलिए हो सकता है क्योंकि मेरी वास्तविक क्वेरी स्ट्रिंग अधिक जटिल है, मैंने यह पहचानने के लिए – Edward

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