2010-10-21 6 views
10

में FOUND_ROWS() फ़ंक्शन के समतुल्य मैं अपने आवेदन में कुछ पेजिंग कर रहा हूं, पोस्टग्रेएसक्यूएल के मानक ऑफ़सेट और LIMIT कीवर्ड का उपयोग करके डेटाबेस से 20 पंक्तियां लौटा रहा हूं। उदाहरण के लिए, पृष्ठ 1 पृष्ठ प्राप्त करने के लिए:Postgresql

SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20 

यह एप्लिकेशन की एक आवश्यकता है जिसे हम उपयोगकर्ता को रिकॉर्ड की कुल संख्या भी दिखाते हैं। तो, जाहिर है, मैं कुल एक अलग क्वेरी जारी करके प्राप्त कर सकते हैं:

SELECT COUNT(*) FROM table WHERE condition 

लेकिन अगर पंक्तियों की एक बड़ी संख्या है, तो यह सर्वोत्कृष्ट समाधान नहीं है। मैं ध्यान दें कि MySQL के लिए एक बहुत ही उपयोगी) कि वास्तव में क्या मैं देख रहा हूँ करता FOUND_ROWS (बुलाया समारोह है:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows

वहाँ PostgreSQL में एक बराबर है?

उत्तर

24

पर देखने PostgreSQL थोड़ी देर के अब जो सीमा से लागू किया जाता है उनकी गिनती पंक्तियों सहित कई काम करने के लिए इस्तेमाल किया जा सकता के लिए window functions पड़ा है।

ऊपर के उदाहरण के आधार पर:

SELECT stuff, 
     count(*) OVER() AS total_count 
FROM table 
WHERE condition 
ORDER BY stuff OFFSET 40 LIMIT 20