- Anda harus menentukan
ORDER BY
untuk menentukan beberapa pengurutan baris. - Saya yakin solusi apa pun untuk MySQL akan secara efektif berarti bahwa kueri Anda dijalankan setidaknya dua kali, jadi lebih baik melakukannya di klien.
Jika Anda setuju dengan menjalankan kueri yang sama dua kali, lakukan sesuatu seperti ini.
Dapatkan ID baris terakhir terlebih dahulu:
SELECT @LastID := ID
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;
Gunakan ID itu dalam kueri utama:
SELECT *
, CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ...
WHERE ...
GROUP BY ...
ORDER BY ID ASC;
Seperti apa adanya, kemungkinan besar akan rusak jika tabel diperbarui saat kedua kueri ini berjalan (ID yang diingat mungkin bukan yang terakhir jika baris ditambahkan atau dihapus, kecuali jika Anda melakukan sesuatu untuk mengatasi masalah ini).
Tentu saja, Anda dapat memasukkan semuanya ke dalam satu kueri:
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;
Anda perlu memeriksa apakah MySQL cukup pintar untuk menjalankan bagian dalam SELECT LIMIT 1
hanya sekali atau akan menjalankannya untuk setiap baris tabel utama. Namun, bahkan dalam kasus terbaik, kueri dijalankan dua kali secara efektif.