Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara memeriksa apakah baris saat ini adalah baris yang terakhir dipilih dalam kueri sql?

  1. Anda harus menentukan ORDER BY untuk menentukan beberapa pengurutan baris.
  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengaktifkan pdo_mysql di gambar buruh pelabuhan php

  2. Konektor MySQL C++ 64bit dibangun dari sumber di Visual Studio 2012

  3. Dapatkan hanya digit menggunakan regexp

  4. Bagaimana pesan Websphere MQ disimpan untuk memungkinkan kegigihan?

  5. Buat kueri untuk mendapatkan jumlah panggilan yang belum selesai