उदाहरण के लिए: का चयन करें * टी जहां T.id में (4,78,12,45)MySQL 'में खंड और वापस आ रिकॉर्ड सेट आदेश
मैं वापस आ रिकॉर्ड स्थिति से सिर्फ क्रम निर्धारित चाहते से 'आईएन' खंड में। मैं यह कैसे कर सकता हूं?
उदाहरण के लिए: का चयन करें * टी जहां T.id में (4,78,12,45)MySQL 'में खंड और वापस आ रिकॉर्ड सेट आदेश
मैं वापस आ रिकॉर्ड स्थिति से सिर्फ क्रम निर्धारित चाहते से 'आईएन' खंड में। मैं यह कैसे कर सकता हूं?
आप FIND_IN_SET का उपयोग कर ऐसा कर सकेगा, उदा
उदाहरण के लिए, यदि आप एक अस्थायी तालिका कि निम्नलिखित की तरह कुछ शामिल है
SELECT * FROM T WHERE T.id IN(4,78,12,45)
ORDER BY FIND_IN_SET(T.id,'4,78,12,45');
जबकि आपको सूची को डुप्लिकेट करना होगा, यदि आप कोड में क्वेरी जेनरेट कर रहे हैं तो यह एक बड़ी समस्या नहीं है।
सामान्य मामले में, आप नहीं कर सकते हैं। जब तक आप ORDER BY
खंड का उपयोग नहीं करते हैं, तब तक SQL ऑर्डर की गारंटी नहीं देता है, और इसे IN
कथन की सामग्री में बंधे नहीं जा सकते हैं।
हालांकि, यदि आप एक अस्थायी तालिका बना सकते हैं जो आपके द्वारा चुने गए मानों का ऑर्डर करता है, तो आप उस तालिका और क्रम में शामिल हो सकते हैं।
id | order
----+------
4 | 1
78 | 2
12 | 3
45 | 4
तो फिर तुम इस तरह यह आदेश कर सकते हैं:
SELECT T.*
FROM T
INNER JOIN temp
ON T.id = temp.id
ORDER BY temp.order ASC
जबकि मुझे पॉल डिक्सन समाधान की सफाई की सफाई पसंद है। यह समझना आसान हो सकता है और यहां तक कि तेज़ भी हो सकता है। –
आप इन क्लॉज द्वारा ऑर्डर नहीं कर सकते हैं। आपको खंड द्वारा एक अलग आदेश प्रदान करना होगा। ऐसा करने का एक तरीका है ऑर्डर द्वारा ऑर्डर स्टेटमेंट बनाकर। हालांकि यह सुंदर नहीं है।
SELECT
*
FROM
T
WHERE
T.Id IN(4, 78, 12, 45)
ORDER BY
CASE
WHEN T.Id = 4 THEN 1
WHEN T.Id = 78 THEN 2
WHEN T.Id = 12 THEN 3
WHEN T.Id = 45 THEN 4
END
+1 मुझे कुछ ऐसा करने के लिए +1 जो मुझे MySQL के बारे में नहीं पता था! – Welbog
+1 अच्छा और साफ! मुझे यह पसंद है, एसक्यूएल सर्वर की इच्छा है। –
इस तरह के छोटे मामलों के लिए, यह बहुत ही कुशल होना चाहिए, लेकिन यदि आपकी चयन सूची बड़ी है, तो मैं कल्पना करूंगा कि अस्थायी तालिका दृष्टिकोण अधिक कुशल होने जा रहा है। –