/ / MySQL सटीक क्रम निर्दिष्ट कर रहा है जहां `आईडी` (…) के साथ - mysql, sql-order-by, खंड

MySQL WHERE `id` IN (...) के साथ सटीक ऑर्डर निर्दिष्ट करता है - mysql, sql-order-by, इन-क्लॉज

क्या MySQL परिणाम क्रमशः WHERE द्वारा ऑर्डर करने का एक आसान तरीका है id में (...) क्लॉज? उदाहरण:

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)

लौटने के लिये

Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3

और भी

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2

लौटने के लिये

Article with id = 5
Article with id = 9

अद्यतन: अधिक विशिष्ट होना, मैं कोष्ठक में डेटा के साथ छेड़छाड़ से बचना चाहता हूं WHERE articles.id IN (4, 2, 5, 9, 3), क्योंकि वे आईडी गतिशील हैं और स्वचालित रूप से आदेशित हैं।

उत्तर:

उत्तर № 1 के लिए 14

हाँ इसी प्रकार की:

SELECT * FROM articles
WHERE articles.id IN (4, 2, 5, 9, 3)
ORDER BY FIND_IN_SET(articles.id, "4,2,5,9,3")

लेकिन यह गैर-मानक एसक्यूएल है और थोड़ा बदबू आती है।


जवाब के लिए 3 № 2

यह मेरे लिए काम करता है: आदेश द्वारा FIELD (Product.id, 4,9,8,5,3,11,24,16)


उत्तर № 3 के लिए 1

MySQL केवल ORDER BY द्वारा सॉर्ट करता है। यही कारण है कि यह डेटाबेस तालिकाओं के लिए बहुत असामान्य नहीं है कि एक अध्यादेश स्तंभ की तरह कुछ है।

articles
+----+------------+-------+
| id | ordinality | (...) |
+----+------------+-------+
|  2 |          2 |    "" |
|  3 |          5 |    "" |
|  4 |          1 |    "" |
|  5 |          3 |    "" |
|  9 |          4 |    "" |
+----+------------+-------+

SELECT *
FROM articles
WHERE articles.id IN (4, 2, 5, 9, 3)
ORDER BY articles.ordinality

जवाब के लिए 0 № 4

मुझे नहीं लगता कि आप ऐसा कर सकते हैं। वहां कोई "स्पष्ट" आदेश नहीं चल रहा है; "इन" कथन केवल आपको बताता है कि क्या प्राप्त करना है, और ऑर्डर करने के बारे में कोई जानकारी नहीं है।

चूंकि आपके द्वारा दिए गए उदाहरणों में कोई स्पष्ट आदेश नहीं है, इसलिए परिणाम वापस आने के बाद आपका सबसे अच्छा दांव कोड में इसे संभालना है।