Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लेफ्ट जॉइन के साथ सटीक पेजिनेशन

यह रही आपकी मूल क्वेरी

SELECT l.location_id, l.location_name, 
       t.type_id, t.type_name, 
       i.location_address, i.location_phone 
FROM location AS l 
LEFT JOIN location_information AS i ON (l.location_id = i.location_id) 
LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id) 
ORDER BY l.location_id DESC 
LIMIT 10 

आप आखिरी बार पेजिनेशन करते हैं। अगर आप इस क्वेरी को रिफलेक्टर करते हैं, तो आप पहले पेजिनेशन कर सकते हैं।

SELECT l.location_id, l.location_name, 
       t.type_id, t.type_name, 
       i.location_address, i.location_phone 
FROM
    (SELECT location_id,location_type_id FROM location
    ORDER BY location_id LIMIT 10) AS k
    LEFT JOIN location AS l ON (k.location_id = l.location_id)
    LEFT JOIN location_information AS i ON (k.location_id = i.location_id) 
    LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id) 
;

सूचना मैंने k . नामक एक उपश्रेणी बनाई है . 10 चाबियां उठाई जाती हैं और पहले ऑर्डर किया जाता है !!!

फिर जॉइन वहां से आगे बढ़ सकते हैं, आशा है कि केवल 10 लोकेशन_आईड्स का उपयोग करें।

सबक्वेरी k . में क्या मदद करेगा? एक इंडेक्स है जिसमें location_id और location_type_id होते हैं

ALTER TABLE location ADD INDEX id_type_ndx (location_id,location_type_id);

यहाँ कुछ और है जो आपको इस दृष्टिकोण के बारे में पसंद आ सकता है

आप अगले 10 आईडी (आईडी 11 - 20) के लिए कैसे पूछताछ करते हैं? इस तरह:

SELECT l.location_id, l.location_name, 
       t.type_id, t.type_name, 
       i.location_address, i.location_phone 
FROM
    (SELECT location_id,location_type_id FROM location
    ORDER BY location_id LIMIT 10,10) AS k
    LEFT JOIN location AS l ON (k.location_id = l.location_id)
    LEFT JOIN location_information AS i ON (k.location_id = i.location_id) 
    LEFT JOIN location_types AS t ON (l.location_type_id = t.type_id) 
;

आपको बस इतना करना है कि LIMIT को बदल दें सबक्वेरी में क्लॉज k प्रत्येक नए पृष्ठ के साथ।

  • LIMIT 20,10
  • LIMIT 30,10
  • और इसी तरह...

मैं स्थान तालिका को हटाकर रिफैक्टरिंग में सुधार कर सकता हूं और सबक्वायरी k इस तरह आवश्यक फ़ील्ड ले जा सकता है:

SELECT k.location_id, k.location_name, 
       t.type_id, t.type_name, 
       i.location_address, i.location_phone 
FROM
    (SELECT location_id,location_type_id,location_name
    FROM location ORDER BY location_id LIMIT 10,10) AS k
    LEFT JOIN location_information AS i ON (k.location_id = i.location_id) 
    LEFT JOIN location_types AS t ON (k.location_type_id = t.type_id) 
;

इस संस्करण के लिए अतिरिक्त अनुक्रमणिका बनाना आवश्यक नहीं होगा।

इसे आज़माएं !!!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस में एक ही फ़ील्ड में संग्रहीत एकाधिक चेकबॉक्स विकल्प

  2. वर्चर प्रकार को फ़िल्टर करने के लिए एक लंबी प्रकार की संख्या का उपयोग करते समय MySQL अतिरिक्त रिकॉर्ड लौटाता है

  3. स्प्रिंग जेपीए (हाइबरनेट) इकाई प्रबंधक के साथ कनेक्शन पूल में कनेक्शन कब लौटाए जाते हैं?

  4. Mysql केस जब ज्वाइन स्टेटमेंट एरर

  5. पंक्तियों की संख्या की जाँच करने के लिए MYSQL में एकाधिक मौजूद नहीं है