दिलचस्प पोस्ट
सी ++ में एक कोड स्निपेट के निष्पादन समय की गणना कैसे करें मैं VS2012 में C ++ / CLI Winforms ऐप कैसे बनाऊँ? पीपीपी में एक गीत के बीपीएम का पता लगाने के लिए JQuery के साथ एक आइफ्रेम पुनः लोड करें डेटा को जोड़ने में एक में 2 एक्सेल तालिकाओं का मिश्रण है? एनएटी में लॉग-इन / कनेक्टेड उपयोगकर्ताओं की सूची कैसे प्राप्त करें? मैं अपने सी # कार्यक्रम के एक पैनल के भीतर एक और अनुप्रयोग कैसे चला सकता हूँ? पांडा: ऑपरेटर चेनिंग के साथ डेटाफ़्रेम के फ़िल्टर पंक्तियाँ फ़ंक्शन संकेतक के माध्यम से C ++ क्लास विधियों को कॉल करना वर्ग JavaLaunchHelper दोनों में कार्यान्वित किया गया है … libinstrument.dylib इन दोनों में से कोई एक प्रयोग किया जाएगा। कौन सा एक अपरिभाषित है मैं जावा में एक सरणी को कैसे घोषित और आरम्भ करूं? पढ़ना और लेखन कॉन्फ़िगरेशन फ़ाइलें जावा: पार्स ईआर वैल्यू से एक चार फोर्ट्रान 90 प्रकार का पैरामीटर कैसे पूरे regex नकारना?

MySQL क्रम में पंक्ति स्थिति में मिलता है

निम्न MySQL तालिका के साथ:

+-----------------------------+ + id INT UNSIGNED + + name VARCHAR(100) + +-----------------------------+ 

मैं तालिका में अन्य पंक्तियों के बीच एक पंक्ति और इसकी स्थिति कैसे चुन सकता हूं, जब name ASC सॉर्ट किया जाता है इसलिए यदि टेबल डेटा इस तरह दिखता है, तो नाम से सॉर्ट किया जाता है:

 +-----------------------------+ + id | name + +-----------------------------+ + 5 | Alpha + + 7 | Beta + + 3 | Delta + + ..... + + 1 | Zed + +-----------------------------+ 

मैं उस पंक्ति की वर्तमान स्थिति को कैसे Beta पंक्ति का चयन कर सकता हूं? मैंने जिस नतीजे की तलाश की है, वह ऐसा कुछ होगा:

 +-----------------------------+ + id | position | name + +-----------------------------+ + 7 | 2 | Beta + +-----------------------------+ 

मैं एक सरल SELECT * FROM tbl ORDER BY name ASC फिर PHP में पंक्तियों की गणना कर सकता हूँ, लेकिन यह केवल एक पंक्ति के लिए एक संभावित बड़े परिणाम लोड करने के लिए बेकार लगता है

वेब के समाधान से एकत्रित समाधान "MySQL क्रम में पंक्ति स्थिति में मिलता है"

इसे इस्तेमाल करो:

 SELECT x.id, x.position, x.name FROM (SELECT t.id, t.name, @rownum := @rownum + 1 AS position FROM TABLE t JOIN (SELECT @rownum := 0) r ORDER BY t.name) x WHERE x.name = 'Beta' 

… एक अद्वितीय स्थिति मान प्राप्त करने के लिए इस:

 SELECT t.id, (SELECT COUNT(*) FROM TABLE x WHERE x.name <= t.name) AS position t.name FROM TABLE t WHERE t.name = 'Beta' 

… संबंधों को समान मूल्य देगा। IE: अगर दूसरे स्थान पर दो मान हैं, तो दोनों की स्थिति 2 होगी, जब पहली क्वेरी उन दोनों में से एक की स्थिति, और 3 को दूसरे की स्थिति देगा …

यह एकमात्र तरीका है जिसके बारे में मैं सोच सकता हूं:

 SELECT `id`, (SELECT COUNT(*) FROM `table` WHERE `name` <= 'Beta') AS `position`, `name` FROM `table` WHERE `name` = 'Beta' 

यदि क्वेरी सरल है और परिणामस्वरूप परिणाम प्राप्त करने का आकार संभवतः बड़ा है, तो आप इसे दो प्रश्नों में विभाजित करने का प्रयास कर सकते हैं।

उस पंक्ति का डेटा प्राप्त करने के लिए केवल एक संकीर्ण फ़िल्टरिंग मापदंड के साथ पहली क्वेरी, और दूसरी क्वेरी स्थिति का आकलन करने के लिए WHERE खंड के साथ COUNT का उपयोग करती है।

उदाहरण के लिए आपके मामले में

प्रश्न 1:

SELECT * FROM tbl WHERE name = 'Beta'

प्रश्न 2:

SELECT COUNT(1) FROM tbl WHERE name >= 'Beta'

हम 2 एम रिकॉर्ड के साथ एक टेबल में इस दृष्टिकोण का उपयोग करते हैं और ओएमजी पॉनीज के दृष्टिकोण से इस तरह से अधिक स्केलेबल है।

मुझे बहुत ही इसी तरह का मुद्दा मिल गया है, यही कारण है कि मैं एक ही सवाल नहीं पूछूंगा, लेकिन मैं यहां साझा करूंगा कि मैंने क्या किया, मुझे एक समूह का उपयोग करना था, और एवीजी द्वारा आदेश वहाँ छात्र, हस्ताक्षर और सॉर्टर के साथ हैं, और मुझे उनको रैंक करना था (दूसरे शब्दों में, मैं पहली बार एवीजी का उपयोग करता हूं, फिर उन्हें डीईएससी में आदेश देता हूं, और फिर अंत में मुझे स्थिति (मेरे लिए रैंक) जोड़नी होती है, इसलिए मैंने किया कुछ सबसे अच्छा जवाब के रूप में यहाँ बहुत कुछ, मेरी समस्या को समायोजित करने के लिए थोड़ा परिवर्तन के साथ):

मैंने आखिर में बाहरी चयन में पद (मेरे लिए रैंक) कॉलम रखा था

 SET @rank=0; SELECT @rank := @rank + 1 AS ranking, t.avg, t.name FROM(SELECT avg(students_signatures.score) as avg, students.name as name FROM alumnos_materia JOIN (SELECT @rownum := 0) r left JOIN students ON students.id=students_signatures.id_student GROUP BY students.name order by avg DESC) t 

तालिका में एक पंक्ति की स्थिति दर्शाती है कि कितनी पंक्तियाँ लक्षित पंक्ति से "बेहतर" हैं

इसलिए, आपको उन पंक्तियों को गिनना चाहिए

का चयन करें COUNT (*) + 1 से table जहां name <'बीटा'

टाई के मामले में, उच्चतम स्थिति लौटा दी जाती है।

यदि आप मौजूदा "बीटा" पंक्ति के बाद "बीटा" के समान नाम के साथ एक और पंक्ति जोड़ते हैं, तो वह स्थिति अभी भी 2 हो जाएगी, क्योंकि वे वर्गीकरण में एक ही जगह साझा करेंगे।

उम्मीद है कि भविष्य में ऐसे लोगों की मदद करेगी जो भविष्य में कुछ इसी तरह की खोज करेंगे, क्योंकि मेरा मानना ​​है कि प्रश्न मालिक ने पहले ही अपनी समस्या का समाधान किया है।

हो सकता है कि आपको क्या करना चाहिए सिंटैक्स जोड़ें

आप LIMIT

तो उपयोग करें

 SELECT * FROM tbl ORDER BY name ASC LIMIT 1 

अगर आपको सिर्फ एक पंक्ति की जरूरत है ..