- Трябва да посочите
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
само веднъж или ще го изпълни за всеки ред от основната таблица. Въпреки това, дори и в най-добрия случай, заявката се изпълнява ефективно два пъти.