मैं एक क्वेरी बनाना चाहता हूं जो तालिका में सभी परिणामों को प्रदर्शित करे, लेकिन तालिका की शुरुआत से 5 तक ऑफसेट हो। जहां तक मैं कह सकता हूं, MySQL की LIMIT को एक सीमा के साथ-साथ ऑफ़सेट की आवश्यकता होती है। क्या इसे करने का कोई तरीका है?MySQL ऑफ़सेट असीमित पंक्तियां
उत्तर
है उपयोग करने की आवश्यकता:
प्राप्त करने के लिए के परिणाम सेसेट के अंत तक ऑफ़सेट होने पर सभी पंक्तियां, आप दूसरे पैरामीटर के लिए कुछ बड़ी संख्या का उपयोग कर सकते हैं। यह बयान 96 पंक्ति से पिछले करने के लिए सभी पंक्तियों को पुन: प्राप्त:
SELECT * FROM tbl LIMIT 95, 18446744073709551615;
भयानक! मैं यहां उम्मीद कर रहा था कि MySQL ने सीमा खंड वैकल्पिक बनाया है, जैसा कि यह है, लेकिन ऑफ़सेट के साथ भी ... लेकिन नहीं! मैंने इस कोड को 18446744073709551615 स्कैटर देखा है और मैं आलसी प्रोग्रामर को दोष दे रहा था, लेकिन यह एक डिज़ाइन सुविधा है! – Petruza
भयानक उत्तर, लेकिन यह MySQL दस्तावेज़ से आधिकारिक है। मैं क्या कह सकता हूं @ _ @ – GusDeCooL
18446744073709551615 उन लोगों के लिए 2^64-1 है जो सोच रहे थे। आप देखना चाहते हैं क्योंकि आप इस मान को 32 बिट पूर्णांक में स्टोर नहीं कर पाएंगे। आपको यह सुनिश्चित करना होगा कि आप संगतता सुनिश्चित करने के लिए इसे एक स्ट्रिंग के रूप में संग्रहीत करें। – AlicanC
आप इसे उल्लेख किया है केवल LIMIT की आवश्यकता है, तो आप सबसे बड़ी सीमा संभव है, जो 18446744073709551615 (अहस्ताक्षरित BIGINT की अधिकतम) से MySQL Manual on LIMIT
SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5
वाह, क्या यह MySQL टीम का आधिकारिक समाधान है? – Antony
एक और दृष्टिकोण एक autoimcremented स्तंभ का चयन करने के लिए और उसके बाद होने का उपयोग कर इसे फ़िल्टर कर किया जाएगा।
SET @a := 0;
select @a:[email protected] + 1 AS counter, table.* FROM table
HAVING counter > 4
लेकिन शायद मैं उच्च सीमा दृष्टिकोण के साथ रहूंगा।
बस आज मैं एक MySQL तालिका से बड़ी मात्रा में डेटा (दस लाख से अधिक पंक्तियों) प्राप्त करने का सबसे अच्छा तरीका पढ़ रहा था। एक तरीका है, जैसा कि सुझाव दिया गया है, LIMIT x,y
का उपयोग करते हुए x
ऑफ़सेट और y
अंतिम पंक्ति जिसे आप वापस करना चाहते हैं। हालांकि, जैसा कि मैंने पाया, यह ऐसा करने का सबसे प्रभावी तरीका नहीं है। यदि आपके पास एक ऑटोइनक्रिकमेंट कॉलम है, तो आप आसानी से SELECT
कथन का उपयोग WHERE
क्लॉज के साथ कर सकते हैं, जिसमें कहा गया है कि आप किस रिकॉर्ड से शुरू करना चाहते हैं।
उदाहरण के लिए, SELECT * FROM table_name WHERE id > x;
ऐसा लगता है कि जब आप LIMIT
का उपयोग कि mysql सभी परिणाम हो जाता है और उसके बाद ही आप रिकॉर्ड में फिट से पता चलता ऑफसेट: नहीं प्रदर्शन के लिए सबसे अच्छा।
स्रोत: इस प्रश्न का उत्तर MySQL Forums। बस ध्यान दें, सवाल लगभग 6 साल पुराना है।
यदि आपने कभी भी एक रिकॉर्ड हटा दिया है तो यह गलत परिणाम देगा। यह विधि विशेष रूप से खतरनाक है, क्योंकि यह ज्यादातर समय काम करती है, और जब यह नहीं होती है तो चुपचाप विफल हो जाती है। – octern
मुझे पता है कि यह पुराना है लेकिन मुझे एक समान प्रतिक्रिया दिखाई नहीं दे रही है, इसलिए यह वह समाधान है जिसका मैं उपयोग करूंगा।
सबसे पहले, मैं तालिका पर एक गिनती क्वेरी निष्पादित करता हूं यह देखने के लिए कि कितने रिकॉर्ड मौजूद हैं। यह क्वेरी तेज़ है और सामान्यतः निष्पादन समय नगण्य है। की तरह कुछ:
SELECT COUNT(*) FROM table_name;
तब मैं अपने प्रश्न का निर्माण होगा परिणाम मैं अपने सीमा के रूप में गिनती से मिला का उपयोग कर (के बाद से है कि पंक्तियों की अधिकतम संख्या है तालिका संभवतः लौट सकता है)। की तरह कुछ:
SELECT * FROM table_name LIMIT count_result OFFSET desired_offset;
या संभवतः कुछ की तरह:
SELECT * FROM table_name LIMIT desired_offset, count_result;
बेशक
, यदि आवश्यक हो, तो आप count_result से desired_offset घटाना एक वास्तविक, सही मूल्य सीमा के रूप में आपूर्ति करने के लिए प्राप्त करने के लिए कर सकता है।"18446744073709551610" मान पास करने से मुझे समझ में नहीं आता है अगर मैं वास्तव में प्रदान करने के लिए उचित सीमा निर्धारित कर सकता हूं।
7 एम रिकॉर्ड के साथ एक टेबल पर गिनती (*) का चयन करें 17s – amd
WHERE .... AND id > <YOUROFFSET>
आईडी किसी भी autoincremented या अद्वितीय संख्यात्मक स्तंभ आपने ...
खराब विचार। यदि आपने कभी पंक्ति हटा दी है तो यह गलत ऑफसेट देगा। – octern
यह अन्य question का उपयोग करते हुए और ग्रेग के जवाब के साथ कि चाल विलय हो सकता है, आप 0 का उपयोग कर सकते ~ अधिकतम अहस्ताक्षरित bigint के बजाय मूल्य:
SELECT * FROM tbl LIMIT ~0 OFFSET 95;
या
SELECT * FROM tbl LIMIT 95, ~0;
ने मारियाडीबी 10.0 और MySQL 5.6 दोनों में इसका परीक्षण किया; काम नहीं करता –
यह अजीब बात है, बेक्यूज मैं इस क्वेरी का उपयोग MySQL 5.6.25 में कर रहा हूं और यह काम करता है। मैंने मारिया डीबी में इसका परीक्षण नहीं किया है। क्या आप मुझे इस मुद्दे या कुछ पर्यावरण विवरण का उदाहरण दे सकते हैं? –
MySQL कहते हैं 'एसक्यूएल वाक्यविन्यास; '~ 0'' – Hett
आप एक MYS उपयोग कर सकते हैं एलआईटी के साथ क्यूएल स्टेटमेंट:
START TRANSACTION;
SET @my_offset = 5;
SET @rows = (SELECT COUNT(*) FROM my_table);
PREPARE statement FROM 'SELECT * FROM my_table LIMIT ? OFFSET ?';
EXECUTE statement USING @rows, @my_offset;
COMMIT;
MySQL 5.5.44 में परीक्षण किया गया। इस प्रकार, हम संख्या 18446744073709551615 के सम्मिलन से बच सकते हैं।
नोट: लेनदेन सुनिश्चित करता है कि परिवर्तनीय @rows कथन के निष्पादन में विचाराधीन तालिका के लिए अनुबंध में है।
जैसा कि अन्य उत्तरों में बताया गया है, MySQL सीमा में रिकॉर्ड की संख्या के रूप में 18446744073709551615 का उपयोग करने का सुझाव देता है, लेकिन इस पर विचार करें: यदि आप 18,446,744,073,709,551,615 रिकॉर्ड प्राप्त करते हैं तो आप क्या करेंगे? वास्तव में, यदि आप 1,000,000,000 रिकॉर्ड प्राप्त करते हैं तो आप क्या करेंगे?
शायद आप एक अरब से अधिक रिकॉर्ड चाहते हैं, लेकिन मेरा मुद्दा यह है कि की संख्या पर कुछ सीमा है, और यह 18 क्विंटल से कम है। स्थिरता, अनुकूलन, और संभवतः प्रयोज्यता के लिए, मैं क्वेरी पर कुछ सार्थक सीमा डालने का सुझाव दूंगा। यह किसी भी व्यक्ति के लिए भ्रम को भी कम करेगा जिसने कभी जादुई दिखने वाला नंबर नहीं देखा है, और कम से कम आप कितने रिकॉर्ड संभालने के इच्छुक हैं, इस बारे में संचार करने का अतिरिक्त लाभ है।
यदि आपको वास्तव में अपने डेटाबेस से सभी 18 क्विंटल रिकॉर्ड प्राप्त करना होगा, तो शायद आप जो चाहते हैं वह 100 मिलियन की वृद्धि और 184 बिलियन गुना लूप में उन्हें पकड़ना है।
- 1. ऑफ़सेट प्राप्त करें सभी पंक्तियां प्राप्त करने के लिए अगला
- 2. ऑफ़सेट
- 3. ऑफ़सेट
- 4. mysql डेटाबेस तालिका में कितनी पंक्तियां?
- 5. MySQL सबक्वेरी रिटर्न एक से अधिक पंक्तियां
- 6. कई तालिकाओं से MYSQL शीर्ष एन पंक्तियां
- 7. [MySQL]: दो निर्भर तालिकाओं से पंक्तियां हटाएं
- 8. MySQL पंक्तियां हटाएं, या "मृत" चिह्नित करें?
- 9. सटीक ऑफ़सेट
- 10. 30 लाख पंक्तियां
- 11. बड़ी प्राथमिक कुंजी: 1+ अरब पंक्तियां MySQL + InnoDB?
- 12. MySQL से पंक्तियां प्रदर्शित करें जहां डेटाटाइम अगले घंटे
- 13. MySQL ऐरे से मेल खाने वाली पंक्तियां चुनें?
- 14. पीडीओ MySQL: एक क्वेरी में एकाधिक पंक्तियां डालें
- 15. पंक्तियां PHP के साथ mysql अद्यतन में प्रभावित
- 16. MySQL पंक्तियां चुनें जहां आज की तारीख दो DATE कॉलम
- 17. MySQL - एक जुड़ा हुआ सबक्वायरी के साथ कई पंक्तियां डालने?
- 18. MySQL Timestamp - अंतिम घंटे के भीतर 3 पंक्तियां प्रदर्शित करें
- 19. सी/सी ++ संरचना ऑफ़सेट
- 20. एफ़िन रूपांतरण मैट्रिक्स ऑफ़सेट
- 21. Date.getTimezone ऑफ़सेट उलटा हुआ?
- 22. डेटा ऑफ़सेट समर्थन
- 23. पायथन समय ऑफ़सेट
- 24. फायरबग और ऑफ़सेट गणना
- 25. पंक्तियां चुनें
- 26. असीमित आईओ?
- 27. असीमित UIScrollView
- 28. असीमित memcpy?
- 29. कुशलतापूर्वक भंडारण 7.300.000.000 पंक्तियां
- 30. MySQL
यह एक पूरी तरह से वैध सवाल है, लेकिन मुझे आश्चर्य है कि क्या कुछ बेहतर होगा और प्रोग्रामिंग के पहले कुछ रिकॉर्डों को नजरअंदाज करना बेहतर होगा। जो सबसे अच्छा जवाब लगता है (डरावनी 5, 1844674407370 9 551615) के डरावने को देखते हुए, मैं माईएसक्यूएल के सीमित सीमाओं के आसपास काम करने का बहुत अधिक समर्थन करता हूं। – cesoid
@cesoid क्या होगा यदि आप '5000, 18446744073709551615' सीमा चाहते हैं। आप अपने कोड को सुंदर दिखने के लिए केवल अतिरिक्त 5000 पंक्तियां नहीं लाने जा रहे हैं। – elipoultorak
@ user3576887 मुझे लगता है कि आप सही हैं, मैं सिर्फ इस विचार के साथ उपरोक्त प्रश्न पर विचार कर रहा था कि 5 कुछ अलग-अलग राशि की बजाय एकमात्र आवश्यकता थी, (और किसी और की समस्या को हल करने के बजाए)। – cesoid