केवल एक ORDER BY
खंड को UNION
. के लिए परिभाषित किया जा सकता है डी क्वेरी। इससे कोई फर्क नहीं पड़ता कि आप UNION
का उपयोग करते हैं या UNION ALL
. MySQL LIMIT
. का समर्थन करता है UNION
. के कुछ हिस्सों पर क्लॉज 'd क्वेरी, लेकिन ऑर्डर को परिभाषित करने की क्षमता के बिना यह अपेक्षाकृत बेकार है।
MySQL में रैंकिंग फ़ंक्शंस का भी अभाव है, जिसे आपको डेटा में अंतराल से निपटने की आवश्यकता होती है (प्रविष्टियों को हटाए जाने के कारण गायब)। चयन कथन में वृद्धिशील चर का उपयोग करने का एकमात्र विकल्प है:
SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t, (SELECT @rownum := 0) r
अब हम पंक्तियों की क्रमागत क्रमांकित सूची प्राप्त कर सकते हैं, ताकि हम इसका उपयोग कर सकें:
WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2)
AND @midpoint - ROUND(@midpoint/2) [email protected]
@midpoint, @midpoint - ROUND(@midpoint/2)
के लिए मान के रूप में 7 का उपयोग करना 4
. का मान लौटाता है . कुल 10 पंक्तियाँ प्राप्त करने के लिए, @upperlimit मान को 10 पर सेट करें। यहाँ पूरी क्वेरी है:
SELECT x.*
FROM (SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t,
(SELECT @rownum := 0) r) x
WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit
लेकिन अगर आप अभी भी LIMIT
का उपयोग करना चाहते हैं , आप उपयोग कर सकते हैं:
SELECT x.*
FROM (SELECT t.id,
@rownum := @rownum+1 as rownum
FROM MEDIA t,
(SELECT @rownum := 0) r) x
WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
ORDER BY x.id ASC
LIMIT 10