- Musisz określić
ORDER BY
zdefiniować sortowanie wierszy. - Uważam, że każde rozwiązanie dla MySQL oznaczałoby, że Twoje zapytanie zostanie wykonane co najmniej dwa razy, więc naprawdę lepiej zrobić to na kliencie.
Jeśli nie masz nic przeciwko dwukrotnemu uruchomieniu tego samego zapytania, zrób coś takiego.
Najpierw pobierz identyfikator ostatniego wiersza:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
Użyj tego identyfikatora w głównym zapytaniu:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
Tak jak jest, najprawdopodobniej pęknie, jeśli tabela zostanie zaktualizowana podczas działania tych dwóch zapytań (zapamiętany identyfikator może nie stać się ostatnim, jeśli wiersze zostaną dodane lub usunięte, chyba że zrobisz coś, aby rozwiązać ten problem).
Oczywiście możesz umieścić to wszystko w jednym zapytaniu:
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;
Musisz sprawdzić, czy MySQL jest wystarczająco inteligentny, aby uruchomić wewnętrzne SELECT LIMIT 1
tylko raz lub uruchomi go dla każdego wiersza tabeli głównej. Mimo to, nawet w najlepszym przypadku zapytanie jest skutecznie wykonywane dwukrotnie.