Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: Xóa bản ghi cuối cùng theo điều kiện (ORDER BY DESC LIMIT 1)

Để xóa bản ghi "cuối cùng" (theo thời gian hoặc ID) thỏa mãn điều kiện, dùng DELETE ... ORDER BY ... DESC LIMIT 1.

Cú pháp

DELETE FROM ten_bang 
WHERE dieu_kien 
ORDER BY cot_sap_xep DESC 
LIMIT 1;

Ví dụ minh họa

Tạo bảng log đăng nhập:

mysql> CREATE TABLE BangDangNhap (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserId INT,
    -> ThoiGianDangNhap DATETIME
    -> );

Chèn dữ liệu (UserId=2 có 3 lần đăng nhập):

mysql> INSERT INTO BangDangNhap(UserId, ThoiGianDangNhap) VALUES
    -> (2, '2019-01-27 13:47:20'),
    -> (1, '2018-11-28 12:30:12'),
    -> (2, '2019-01-26 11:30:30'),
    -> (1, '2015-03-11 15:23:55'),
    -> (2, '2019-03-21 16:01:56');

Dữ liệu gốc:

+----+--------+---------------------+
| Id | UserId | ThoiGianDangNhap    |
+----+--------+---------------------+
| 1  | 2      | 2019-01-27 13:47:20 |
| 2  | 1      | 2018-11-28 12:30:12 |
| 3  | 2      | 2019-01-26 11:30:30 |
| 4  | 1      | 2015-03-11 15:23:55 |
| 5  | 2      | 2019-03-21 16:01:56 |  -- mới nhất của UserId=2
+----+--------+---------------------+

Xóa lần đăng nhập gần nhất của UserId = 2

mysql> DELETE FROM BangDangNhap 
    -> WHERE UserId = 2 
    -> ORDER BY ThoiGianDangNhap DESC 
    -> LIMIT 1;

Kết quả: Query OK, 1 row affected (bản ghi Id=5 bị xóa)

Kiểm tra lại

+----+--------+---------------------+
| Id | UserId | ThoiGianDangNhap    |
+----+--------+---------------------+
| 1  | 2      | 2019-01-27 13:47:20 |
| 2  | 1      | 2018-11-28 12:30:12 |
| 3  | 2      | 2019-01-26 11:30:30 |
| 4  | 1      | 2015-03-11 15:23:55 |
+----+--------+---------------------+

Lưu ý: ORDER BY ... DESC LIMIT 1 đảm bảo xóa bản ghi có giá trị lớn nhất của cột sắp xếp (mới nhất). Không có ORDER BY thì xóa bản ghi ngẫu nhiên thỏa điều kiện.