2009-07-29 18 views
6

मैं Kohana प्रलेखन पर देखा:एक क्वेरी ऑफ़सेट क्या है?

$content = new View('pages/items'); 
$items = new Items_Model; 

$content->items = $items->get_items($page_no, 10); // page to get starting at offset, number of items to get 

आप देख सकते हैं, हम यह मान सकते हैं कि हम आइटम मॉडल है कि 2 पैरामीटर, $ page_no और 10 प्राप्त करता है के लिए get_items विधि है (जैसा कि यहाँ दिखाया)। मुझे पता है कि 10 आइटम प्राप्त करने की संख्या है और $ पृष्ठ_no ऑफसेट

पर शुरू करने के लिए पृष्ठ है, शायद मैं 10 पैरामीटर के लिए एक सीमा एसक्यूएल कथन लागू कर सकता हूं, लेकिन एसक्यूएल स्टेटमेंट $ page_no के अनुरूप होगा? Kohana के बारे में क्या मतलब है "पृष्ठ पर शुरू करने के लिए ऑफसेट"

उत्तर

11

यह एक LIMIT बयान से मेल खाती है:

SELECT something FROM table LIMIT $limit OFFSET $offset; 

//or alternatively 
SELECT something FROM table LIMIT $offset,$limit; 

दूसरे शब्दों में, मेज से कुछ का चयन में, लेकिन केवल मुझे $limit रिकॉर्ड से शुरू देना रिकॉर्ड $offset

$offset = ($page_no - 1) * $limit
$page_no 1 आधारित है। MySQL दस्तावेज में

अधिक जानकारी:

12.2.8 SELECT Syntax

Disclamer:$limit और $offset केवल समझ सहायता करने के लिए इस सवाल का प्रयोग किया जाता है। बेशक, आप उचित मूल्य से बचने के बिना एक प्रश्न बनाना नहीं चाहते हैं।

+0

तुम भी, वास्तव में सीमा राशि से पृष्ठ संख्या गुणा करने के लिए, स्पष्ट पृष्ठांकन व्यवहार पाने के लिए चाहते हो सकता है अन्यथा, आप केवल एकल पंक्तियों छोड़ दे रहे है, बजाय पृष्ठ- पंक्तियों के आकार के टुकड़े। – SingleNegationElimination

5

दुर्भाग्यवश दुर्भाग्यवश दुर्भाग्य से प्रश्नों में अंकन या समूहीकरण पर विचार करने के दो सामान्य तरीकों को भ्रमित करता है। एंड्रयू के वर्णन के रूप में चयन वाक्यविन्यास, OFFSET parameter की अनुमति देता है, कुछ भी लौटने से पहले छोड़ने के लिए आइटमों की संख्या। हालांकि, इसका उपयोग प्रायः अंकन के साथ किया जाता है, जैसा कि pagination library में से आपका उद्धरण लिया गया था। इस मामले में, एक विशिष्ट पृष्ठ संख्या के लिए पूछना अधिक उपयोगी है।

दोनों की तुलना करने के लिए, एक ऐसे मामले पर विचार करें जहां आपने एक खोज की है और प्रति पेज 10 आइटम के साथ पृष्ठ 3 पर गया है। आइटम 1-20 पहले दो पृष्ठों पर थे; इसलिए, OFFSET पैरामीटर 20 हो जाएगा:

SELECT * FROM table WHERE searched LIMIT 10 OFFSET 20 

या

SELECT * FROM table WHERE searched LIMIT 20,10 

दुर्भाग्य से, उद्धृत उदाहरण में $page_no पैरामीटर शायद 3, पृष्ठ संख्या बनना चाहता है। उस स्थिति में, एसक्यूएल ऑफसेट की गणना की जानी चाहिए। यह देखते हुए कि get_items एक मानक मॉडल विधि प्रतीत नहीं होता है, इसकी शायद इसकी गणना की जाती है; वैकल्पिक रूप से, पेजिनेशन लाइब्रेरी में sql_offset नामक एक प्रॉपर्टी होती है जो शायद आपके लिए इसकी गणना करती है। किसी भी तरह से, गणना आसान पर्याप्त है:

$offset = max($page_no - 1, 0) * $limit; 
संबंधित मुद्दे