अगर (दुर्भाग्य से नामित) कॉलम Column_1
अद्वितीय है, आप बस यह कर सकते हैं:
WHERE Column_1 > :last_retrieved_value
प्रश्न से ऐसा प्रतीत होता है कि Column_1
अद्वितीय नहीं है, लेकिन (Column_1,Column_2)
टपल अद्वितीय है।
"अगले पृष्ठ" क्वेरी के लिए सामान्य रूप, उन दो स्तंभों द्वारा क्रमित करना, उन दो स्तंभों के लिए अंतिम पुनर्प्राप्त मानों का उपयोग करना होगा...
(Column1,Column2) > (:lrv_col1,:lrv_col2)
(lrv =पिछली क्वेरी द्वारा पुनर्प्राप्त अंतिम पंक्ति से सहेजा गया मान)
MySQL में उस स्थिति को लिखने के लिए, हम वह कर सकते हैं जैसा आपने दिखाया है:
WHERE t.Column_1 > :lrv_col1
OR ( t.Column_1 = :lrv_col1 AND t.Column_2 > :lrv_col2 )
या, हम इसे इस तरह लिख सकते हैं, जो मुझे पसंद है, क्योंकि MySQL के लिए OR शर्त से भ्रमित होने और गलत इंडेक्स का उपयोग करने की संभावना बहुत कम है...
WHERE t.Column_1 >= :lrv_col1
AND ( t.Column_1 > :lrv_col1 OR t.Column_2 > :lrv_col2 )
ORDER BY t.Column_1, t.Column_2
LIMIT n
इसे तीन तक बढ़ाने के लिए कॉलम, स्थिति की जांच करने के लिए...
(c1,c2,c3) > (:lrv1,:lrv2,:lrv3)
हम इसे वैसे ही हैंडल करते हैं जैसे दो कॉलम के मामले में, c1
. को हैंडल करते हुए सबसे पहले, इसे दो स्तंभों की तरह तोड़ना:
WHERE c1 >= :lrv1
AND ( c1 > :lrv1 OR ( ... ) )
ORDER BY c1, c2, c3
LIMIT n
और अब वह प्लेसहोल्डर ...
(c2
. पर सिर्फ चेक कहां होता पहले, वास्तव में फिर से दो स्तंभों का एक और मामला है। हमें जाँच करने की आवश्यकता है:(c2,c3) > (lrv2,lrv3)
, ताकि हम उसी पैटर्न का उपयोग करके उसका विस्तार कर सकें:
WHERE c1 >= :lrv1
AND ( c1 > :lrv1 OR ( c2 >= :lrv2
AND ( c2 > :lrv2 OR c3 > :lrv3 )
)
)
ORDER BY c1,c2,c3
LIMIT n
मैं मानता हूं कि विस्तार थोड़ा गड़बड़ लग सकता है। लेकिन यह एक बहुत ही नियमित पैटर्न का पालन करता है। इसी तरह, हम चार . पर शर्त व्यक्त कर सकते हैं कॉलम...
(c1,c2,c3,c4) > (:lrv1,:lrv2,:lrv3,:lrv4)
हमारे पास तीन कॉलम के लिए जो कुछ है, हम वही लेते हैं, और हमें c3 > :lrv3
का विस्तार करने की आवश्यकता है इसे ( c3 >= :lrv3 AND ( c3 > :lrv3 OR c4 > :lrv4 ) )
से बदलने के लिए
WHERE c1 >= :lrv1
AND ( c1 > :lrv1 OR ( c2 >= :lrv2
AND ( c2 > :lrv2 OR ( c3 >= :lrv3
AND ( c3 > :lrv3 OR c4 > :lrv4 )
)
)
)
)
ORDER BY c1,c2,c3,c4
LIMIT n
भविष्य के पाठक की सहायता के रूप में, मैं इस ब्लॉक पर टिप्पणी करूंगा, और इरादे का संकेत दूंगा ...
-- (c1,c2,c3,c4) > (lr1,lr2,lr3,lr4)
और यह अच्छा होगा यदि MySQL हमें उसी तरह तुलना व्यक्त करने की अनुमति देगा। दुर्भाग्य से, हमें इसे उस चीज़ में विस्तारित करना होगा जिसे MySQL समझता है।