Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để kiểm tra xem hàng hiện tại có phải là hàng được chọn cuối cùng trong truy vấn sql hay không?

  1. Bạn phải chỉ định ORDER BY để xác định một số cách sắp xếp các hàng.
  2. Tôi tin rằng bất kỳ giải pháp nào cho MySQL đều có nghĩa là truy vấn của bạn được thực thi ít nhất hai lần, vì vậy thực sự tốt hơn nếu thực hiện trên máy khách.

Nếu bạn đồng ý với việc chạy cùng một truy vấn hai lần, thì hãy làm như thế này.

Lấy ID của hàng cuối cùng trước tiên:

SELECT @LastID := ID 
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID DESC
LIMIT 1;

Sử dụng ID đó trong truy vấn chính:

SELECT * 
    , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
FROM ... 
WHERE ... 
GROUP BY ...
ORDER BY ID ASC;

Như vậy, rất có thể nó sẽ bị hỏng nếu bảng được cập nhật trong khi hai truy vấn này chạy (ID được nhớ có thể không trở thành ID cuối cùng nếu các hàng được thêm hoặc xóa, trừ khi bạn làm gì đó để giải quyết vấn đề này).

Tất nhiên, bạn có thể đặt tất cả vào một truy vấn:

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;

Bạn cần kiểm tra xem MySQL có đủ thông minh để chạy SELECT LIMIT 1 bên trong hay không chỉ một lần hoặc nó sẽ chạy nó cho mọi hàng của bảng chính. Tuy nhiên, ngay cả trong trường hợp tốt nhất, truy vấn vẫn được thực thi hiệu quả hai lần.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TRIGGER hoặc MULTI Insert

  2. Ý nghĩa không gian đĩa của việc đặt giá trị cột MySQL thành NULL thay vì 0 hoặc ''

  3. Cách kết nối với mysql từ xa qua đường hầm ssh trong ứng dụng khởi động mùa xuân

  4. Id số nguyên duy nhất, không thể đoán trước, 12 chữ số,

  5. Tạo JSON lồng nhau bằng PHP MySQL