- U moet
ORDER BY
opgeven om een sortering van de rijen te definiëren. - Ik geloof dat elke oplossing voor MySQL in feite zou betekenen dat je query minstens twee keer wordt uitgevoerd, dus het is echt beter om het op de client te doen.
Als je het goed vindt om dezelfde query twee keer uit te voeren, doe dan iets als dit.
Haal eerst de ID van de laatste rij op:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
Gebruik die ID in de hoofdquery:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
Zoals het is, zal het hoogstwaarschijnlijk breken als de tabel wordt bijgewerkt terwijl deze twee query's worden uitgevoerd (de onthouden ID wordt mogelijk niet de laatste als rijen worden toegevoegd of verwijderd, tenzij u iets doet om dit probleem op te lossen).
Je kunt het natuurlijk allemaal in één zoekopdracht stoppen:
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;
U moet controleren of MySQL slim genoeg is om de innerlijke SELECT LIMIT 1
. uit te voeren slechts één keer of het zal het voor elke rij van de hoofdtabel uitvoeren. Maar zelfs in het beste geval wordt de query effectief twee keer uitgevoerd.