Giới thiệu
MySQL cho phép gán kết quả của một truy vấn SELECT vào biến người dùng (user-defined variable) bằng cú pháp SET @bien := (SELECT ...) hoặc SELECT @bien := cot FROM .... Biến này có hiệu lực trong suốt phiên làm việc (session).
Ví dụ minh họa: Lấy bản ghi cuối cùng (giả lập)
Bước 1: Tạo bảng và chèn dữ liệu
CREATE TABLE DemoTable2013 (Name VARCHAR(20));
INSERT INTO DemoTable2013 VALUES ('Chris'), ('David'), ('Mike'), ('Sam'), ('Bob');
Bước 2: Đếm tổng số dòng và gán vào biến @query
SET @query := (SELECT COUNT(*) FROM DemoTable2013);
Bước 3: Sử dụng biến để lấy bản ghi cuối (giảm dần từ tổng số dòng về 0)
SELECT Name
FROM DemoTable2013
WHERE (@query := @query - 1) = 0;
Kết quả:
+------+
| Name |
+------+
| Bob |
+------+
Giải thích: Biến @query ban đầu là 5. Mệnh đề WHERE giảm giá trị biến đi 1 ở mỗi hàng duyệt qua. Khi biến bằng 0 (tức là hàng thứ 5), hàng đó được chọn. Đây là kỹ thuật "lấy hàng cuối" không dùng ORDER BY ... LIMIT 1 (tuy nhiên cách này phụ thuộc vào thứ tự lưu trữ vật lý, không đảm bảo đúng logic nghiệp vụ).
Cách tốt hơn để lấy hàng cuối:
SELECT Name FROM DemoTable2013 ORDER BY Name DESC LIMIT 1;
-- Hoặc nếu có cột ID tự tăng:
SELECT Name FROM DemoTable2013 ORDER BY Id DESC LIMIT 1;