- आपको
ORDER BY
निर्दिष्ट करना होगा पंक्तियों की कुछ छँटाई को परिभाषित करने के लिए। - मेरा मानना है कि MySQL के लिए किसी भी समाधान का प्रभावी ढंग से मतलब होगा कि आपकी क्वेरी को कम से कम दो बार निष्पादित किया गया है, इसलिए क्लाइंट पर इसे करना वास्तव में बेहतर है।
यदि आप एक ही क्वेरी को दो बार चलाने के साथ ठीक हैं, तो ऐसा कुछ करें।
पहले अंतिम पंक्ति की आईडी प्राप्त करें:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
मुख्य प्रश्न में उस आईडी का प्रयोग करें:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
जैसा कि, सबसे अधिक संभावना है कि यदि इन दो प्रश्नों के चलने के दौरान तालिका को अपडेट किया जाता है तो यह टूट जाएगा (यदि आप इस समस्या को हल करने के लिए कुछ नहीं करते हैं, तो याद किया गया आईडी अंतिम नहीं बन सकता है, जब तक कि पंक्तियों को जोड़ा या हटा दिया जाता है)।
बेशक, आप सभी को एक प्रश्न में डाल सकते हैं:
SELECT
*,
CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
FROM
YourTable
CROSS JOIN
(
SELECT ID AS LastID
FROM YourTable
ORDER BY ID DESC
LIMIT 1
) AS TableLastID
ORDER BY ID ASC;
आपको यह जांचना होगा कि क्या MySQL आंतरिक SELECT LIMIT 1
को चलाने के लिए पर्याप्त स्मार्ट है या नहीं केवल एक बार या यह इसे मुख्य तालिका की प्रत्येक पंक्ति के लिए चलाएगा। फिर भी, सबसे अच्छी स्थिति में भी क्वेरी को प्रभावी ढंग से दो बार निष्पादित किया जाता है।