- Bạn phải chỉ định
ORDER BY
để xác định một số cách sắp xếp các hàng. - Tôi tin rằng bất kỳ giải pháp nào cho MySQL đều có nghĩa là truy vấn của bạn được thực thi ít nhất hai lần, vì vậy thực sự tốt hơn nếu thực hiện trên máy khách.
Nếu bạn đồng ý với việc chạy cùng một truy vấn hai lần, thì hãy làm như thế này.
Lấy ID của hàng cuối cùng trước tiên:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
Sử dụng ID đó trong truy vấn chính:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
Như vậy, rất có thể nó sẽ bị hỏng nếu bảng được cập nhật trong khi hai truy vấn này chạy (ID được nhớ có thể không trở thành ID cuối cùng nếu các hàng được thêm hoặc xóa, trừ khi bạn làm gì đó để giải quyết vấn đề này).
Tất nhiên, bạn có thể đặt tất cả vào một truy vấn:
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;
Bạn cần kiểm tra xem MySQL có đủ thông minh để chạy SELECT LIMIT 1
bên trong hay không chỉ một lần hoặc nó sẽ chạy nó cho mọi hàng của bảng chính. Tuy nhiên, ngay cả trong trường hợp tốt nhất, truy vấn vẫn được thực thi hiệu quả hai lần.