2013-04-11 3 views
19

का उपयोग कर सभी रिकॉर्ड मैं एक तरह से तलाश कर रहा हूँ का चयन करेंपूरा करने के लिए MySQL सीमा और OFFSET क्वेरी

SELECT * FROM table LIMIT all OFFSET 0 

वहाँ का एक तरीका है एसक्यूएल स्टेटमेंट लिखकर एलआईटी और ऑफसेट का उपयोग कर रहा है लेकिन फिर भी सभी परिणाम प्राप्त हो रहे हैं?
(बेशक मैं एक IF कथन का उपयोग कर सकते हैं, लेकिन मैं नहीं बल्कि यदि संभव हो तो इसे बचने के लिए)

किसी भी मदद की सराहना की होगी!

+4

क्यों सीमित होने की क्वेरी परिणाम चाहते हैं आप अधिकतम संख्या लिखने के लिए करता है, तो आप न चाहते हो? LIMIT का पूरा उद्देश्य (duh) परिणामों की संख्या LIMIT है। – jcorry

+5

बहुत आसान: कभी-कभी आप कोड की केवल एक पंक्ति लिखना चाहते हैं (या आवश्यक न्यूनतम लाइनें) जिसमें सभी अलग-अलग परिदृश्य शामिल होंगे। –

+0

उदाहरण: एक स्क्रिप्ट जो SQL क्वेरी के लिए सीमा के मान के रूप में तर्क लेती है। कभी-कभी आप इसे 5 के लिए चलाने के लिए चाहते हैं, कभी-कभी 50 के लिए, कभी-कभी सभी के लिए। –

उत्तर

26

MySQL documentation से:

एक निश्चित से सभी पंक्तियों को प्राप्त करने के लिए परिणाम सेट के अंत तक ऑफसेट, आप दूसरा पैरामीटर के लिए कुछ बड़ी संख्या में उपयोग कर सकते हैं। यह कथन 96 वीं पंक्ति से आखिरी पंक्तियों तक सभी पंक्तियों को पुनर्प्राप्त करता है:

चुनें * Tbl LIMIT 95,18446744073709551615 से चुनें;

तो सभी पंक्तियों ऐसा नज़र आ सकता हो रही:

SELECT * FROM tbl LIMIT 0,18446744073709551615; 
+23

"कुछ बड़ी संख्या" - MySQL ... भयानक –

+12

18446744073709551615 हालांकि कुछ संख्या नहीं है; यह – sroes

+0

का अधिकतम मूल्य है हां मैंने सोचा कि यह कुछ प्रकार का होगा लेकिन उन्हें वास्तव में कहना चाहिए कि "कुछ बड़ी संख्या" के बजाय ... या नहीं? –

1
नहीं

हो सकता है कि साफ समाधान लेकिन एक बहुत ही उच्च संख्या के लिए काम कर सकता था सीमा निर्धारित। ऑफ़सेट 0

IF कथन का उपयोग क्यों न करें जहां आप एक कथन के रूप में क्वेरी को सीमा और ऑफ़सेट जोड़ते हैं?

+0

बेशक यह एक उचित दृष्टिकोण है, हालांकि मेरा लक्ष्य कोड से एक पंक्ति लिखकर बचाना था: $ this-> डीबी-> प्राप्त करें ($ डेटाबेस, $ सीमा, $ ऑफ़सेट) –

2

यह यह करने के लिए सबसे अच्छा तरीका नहीं हो सकता है, लेकिन इसके पहले जो मन में आता ...

SELECT * FROM myTable LIMIT 0,1000000

कुछ पर्याप्त रूप से बड़ी संख्या में है कि आप जानते हैं कि हमेशा से बड़ा हो जाएगा के साथ 1000000 बदलें तालिका में रिकॉर्ड्स की कुल संख्या।

+0

आपका समय डालने के लिए Thx। –

0
  1. यदि आप mysql दस्तावेज़ द्वारा परिभाषित उच्च सीमा तक सीमा निर्धारित करते हैं तो आपको एक त्रुटि प्राप्त हो सकती है। इसके अलावा, आपको इसे 99 99 99 99 99 999 को सीमित करने की कोशिश करनी चाहिए, उच्चतर जाकर आपको एक त्रुटि मिल सकती है जब तक आप उच्चतर जाने के लिए सर्वर सेट नहीं करते।

  2. आप किसी फ़ंक्शन में LIMIT का उपयोग करना चाह सकते हैं, इसलिए यह एक बुरा विचार नहीं है। यदि आप इसे किसी फ़ंक्शन में उपयोग करते हैं, तो हो सकता है कि आप इसे एक बिंदु पर सीमित करें और किसी अन्य बिंदु पर 1 को सीमित करें।

  3. नीचे, मैं एक उदाहरण सूचीबद्ध करता हूं जहां आप चाहते हैं कि आपके आवेदन की कोई सीमा न हो।

समारोह get_navigation ($ का चयन करें = "*", $ = से "पृष्ठ", $ दिखाई = 1, $ subject_id = 2, $ order_by = "स्थिति", $ sort_by = "एएससी", $ ऑफसेट = 0, $ सीमा = 9551615) { वैश्विक $ कनेक्शन;

$query = " SELECT {$select} "; 
$query .= " FROM {$from} "; 

$query .= " WHERE visible = {$visible} "; 
$query .= " AND subject_id = {$subject_id} "; 

$query .= " ORDER BY {$order_by} {$sort_by} "; 
$query .= " LIMIT {$offset}, {$limit} "; 

mysqli_query($connection, $query); 
$navigation_set = mysqli_query($connection, $query); 
confirm_query($navigation_set); 
return $navigation_set; 


} 

define ("SELECT", "*"); 
define ("FROM", "pages"); 
define ("VISIBLE", 1); 
define ("SUBJECT_ID", 3); 
define ("ORDER_BY", "position"); 
define ("SORT_BY", "ASC"); 
define ("LIMIT", "0"); 


$navigation_set = get_navigation(SELECT, FROM, VISIBLE, SUBJECT_ID, ORDER_BY, SORT_BY); 
+2

वाह आप इस तरह के कोड में बदले जाने वाले चर को परिभाषित क्यों करेंगे, इसकी पागल – Peter

2

मैं MySQL के साथ NodeJS में इस कोड का इस्तेमाल किया और यह अच्छी तरह से चलाए जाने के दौरान, यह आप में मदद मिल सकती है। आप इसका उपयोग क्यों करते हैं?

  1. यह विश्वसनीय है क्योंकि यह एक स्ट्रिंग है जो क्वेरी के साथ संलग्न होगी।
  2. यदि आप सीमा निर्धारित करना चाहते हैं तो आप चर के साथ सीमा को अन्यथा चर के साथ 0 पास कर सकते हैं।

    var noOfGroupShow=0; //0: all, rest according to number 
    if (noOfGroupShow == 0) { 
        noOfGroupShow = ''; 
    } 
    else { 
        noOfGroupShow = ' LIMIT 0, '+noOfGroupShow; 
    } 
    var sqlGetUser = "SELECT `user_name`,`first_name`,`last_name`,`image`,`latitude`, `longitude`,`phone`,`gender`,`country`,`status_message`,`dob` as user_date_of_birth FROM `tb_user` WHERE `user_id`=?"+noOfGroupShow; 
    
1

रिकॉर्ड बजाय some large number का उपयोग कर के, बड़े होते हैं mysql_num_rows का उपयोग गतिशील रूप से रिकॉर्ड की कुल राशि को खोजने के लिए होगा, के रूप में।

$cektotalrec=mysql_query("SELECT * FROM TABLE"); 
$numoffset=mysql_num_rows($cektotalrec); 
$numlimit="0"; 

तो:

$final="SELECT * FROM table ".$numlimit.", ".$numoffset""; 
संबंधित मुद्दे