करने के लिए उपयोगकर्ता चर का उपयोग कर अतः उपयोगकर्ता चर का उपयोग का सुझाव पर नंबर पंक्तियों
यहाँ मैं अक्सर उत्तर खोजने के लिए उपयोगकर्ता चर का उपयोग करना कुछ बात या अन्य नंबर पर। शायद सबसे स्पष्ट उदाहरण किसी दिए गए परिणाम सेट से प्रत्येक दूसरी पंक्ति का चयन करने के लिए एक प्रश्न होगा। (यह प्रश्न और प्रश्न this answer के समान है, लेकिन यह this उत्तर था जो वास्तव में इस प्रश्न को ट्रिगर करता था)।गारंटी जब संख्या पंक्तियों
SELECT *
FROM (SELECT *, (@row := @row + 1) AS rownum
FROM (SELECT @row := 0) AS init, tablename
ORDER BY tablename.ordercol
) sub
WHERE rownum % 2 = 1
यह दृष्टिकोण आम तौर पर काम करता प्रतीत होता है।
कारण, सावधान
दूसरी ओर होने के लिए MySQ docs राज्य:
एक सामान्य नियम के रूप में, आप एक उपयोगकर्ता चर को कोई मान निर्दिष्ट नहीं किया जाना चाहिए और एक ही कथन में मूल्य पढ़ । आपको परिणाम मिलने वाले परिणाम मिल सकते हैं, लेकिन इसकी गारंटी नहीं है। उपयोगकर्ता चर शामिल अभिव्यक्तियों के मूल्यांकन के लिए आदेश अनिर्धारित है और किसी दिए गए कथन में निहित तत्वों के आधार पर बदल सकता है; इसके अलावा, यह आदेश MySQL सर्वर के रिलीज़ के बीच समान होने की गारंटी नहीं है।
कोर सवाल
तो मेरे सवाल का कैसे वर्तमान सर्वर का उपयोग इस तरह के एक आदेश प्राप्त करने के लिए नहीं है और इसके बजाय आप उपयोगकर्ता चर का उपयोग कर सुझाव दिया समाधान गारंटी सब (उचित) परिस्थितियों में और के लिए काम करने के लिए है MySQL के सभी भावी संस्करण।
द्वारा "गारंटी" मेरा मतलब है MySQL दस्तावेज़ या कुछ मानक MySQL दावों के अनुरूप आधिकारिक स्रोत। ऐसे आधिकारिक उत्तरों की कमी, अक्सर उपयोग किए जाने वाले ट्यूटोरियल या MySQL स्रोत कोड के कुछ हिस्सों जैसे अन्य स्रोतों को उद्धृत किया जा सकता है। द्वारा "काम करता है" मेरा मतलब यह है कि परिणाम की प्रति पंक्ति एक बार, और ORDER BY
लाइन द्वारा प्रेरित क्रम में असाइनमेंट निष्पादित किया जाएगा।
SELECT *
FROM (SELECT *, (@row := @row + 1) AS rownum
FROM (SELECT @row := 0) AS init, tablename
HAVING rownum > 0
ORDER BY tablename.ordercol
) sub
WHERE rownum % 2 = 1
MySQL 5.5.27 वर्तमान में SQL Fiddle पर स्थापित पर एक खाली परिणाम का उत्पादन करेगा: एक को तोड़ने क्वेरी
की
@ एचवीडी, 'पॉइंटर] (http://bugs.mysql.com/bug.php?id=35893) के लिए धन्यवाद' ROW_NUMBER' सुविधा अनुरोध पर। [डैम्स] (http://stackoverflow.com/users/53341/dems) हाल ही में [मुझे बताया] (http://stackoverflow.com/a/12727443) इस फ़ंक्शन के बारे में। बूट करने के लिए काफी शक्तिशाली, और अच्छी तरह से परिभाषित लगता है। 2008 से उस अनुरोध पर बहुत बुरा प्रतीत होता है। – MvG
मैंने अपनी टिप्पणी हटा दी जब मैंने देखा कि टिप्पणियों में 'ROW_NUMBER' पहले से ही उल्लेख किया गया था और आपके पिछले प्रश्न के उत्तर :) – hvd
[क्या आपने पहले से ही यह लेख पढ़ा है?] (http://www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/) विशेष रूप से भाग 'MySQL क्लाइंट को भेजे जाने तक उपयोगकर्ता चर वाले अभिव्यक्तियों का मूल्यांकन नहीं करता है, ' –