Làm thế nào tôi có thể SELECT
hàng cuối cùng trong một bảng MySQL?
Tôi đang lấy INSERT
dữ liệu và tôi cần lấy một giá trị cột từ hàng trước.
Có một cái auto_increment
trong bàn.
auto_increment
trong đó. Tôi muốn một cái được thêm gần đây nhất.
Làm thế nào tôi có thể SELECT
hàng cuối cùng trong một bảng MySQL?
Tôi đang lấy INSERT
dữ liệu và tôi cần lấy một giá trị cột từ hàng trước.
Có một cái auto_increment
trong bàn.
auto_increment
trong đó. Tôi muốn một cái được thêm gần đây nhất.
Câu trả lời:
Vâng, có một auto_increment trong đó
Nếu bạn muốn cuối cùng của tất cả các hàng trong bảng, thì đây cuối cùng là thời điểm mà MAX(id)
câu trả lời đúng! Loại:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
được lập chỉ mục.
Hãy nhớ rằng các bảng trong cơ sở dữ liệu quan hệ chỉ là tập hợp các hàng. Và bộ trong toán học là bộ sưu tập không có thứ tự. Không có hàng đầu tiên hoặc cuối cùng; không có hàng trước hoặc hàng tiếp theo.
Trước tiên, bạn sẽ phải sắp xếp tập hợp các hàng không có thứ tự của mình theo một số trường và sau đó bạn sẽ tự do lặp lại thông qua tập kết quả theo thứ tự bạn đã xác định.
Vì bạn có trường tăng tự động, tôi giả sử bạn muốn đó là trường sắp xếp. Trong trường hợp đó, bạn có thể muốn làm như sau:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Xem cách đầu tiên chúng tôi sắp xếp tập hợp các hàng không có thứ tự theo your_auto_increment_field
(hoặc bất cứ thứ gì bạn có tên) theo thứ tự giảm dần. Sau đó, chúng tôi giới hạn các tập kết quả chỉ là hàng đầu tiên với LIMIT 1
.
Bạn có thể kết hợp hai truy vấn được đề xuất bởi @spacepille thành một truy vấn giống như thế này:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Nó sẽ hoạt động nhanh, nhưng trên các bảng INNODB, nó chậm hơn một phần triệu giây so với ĐẶT HÀNG + GIỚI HẠN.
answered Jun 14 at 9:41
khoảng 1 năm và 6 tháng trước đó :)
trên các bảng có nhiều hàng là hai truy vấn có thể nhanh hơn ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Làm cho nó đơn giản sử dụng: PDO::lastInsertId
Hầu như mọi bảng cơ sở dữ liệu, đều có cột auto_increment (thường là id)
Nếu bạn muốn cuối cùng của tất cả các hàng trong bảng,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
HOẶC LÀ
Bạn có thể kết hợp hai truy vấn thành một truy vấn giống như thế này:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Truy vấn này được sử dụng để lấy bản ghi cuối cùng trong bảng của bạn.
Nhiều câu trả lời ở đây cũng nói như vậy (thứ tự tăng dần tự động của bạn), không sao, miễn là bạn có một cột tự động được lập chỉ mục.
Mặt khác, nếu bạn có trường như vậy và đó là khóa chính, sẽ không có hình phạt về hiệu suất khi sử dụng order by
so với select max(id)
. Khóa chính là cách dữ liệu được sắp xếp trong các tệp cơ sở dữ liệu (ít nhất là đối với InnoDB) và RDBMS biết dữ liệu đó kết thúc ở đâu và nó có thể tối ưu hóa order by id + limit 1
giống như đạt đượcmax(id)
Bây giờ, con đường ít đi là khi bạn không có khóa chính tự động. Có thể khóa chính là khóa tự nhiên, là tổng hợp của 3 trường ... Tuy nhiên, không phải tất cả đều bị mất. Từ ngôn ngữ lập trình, trước tiên bạn có thể nhận được số lượng hàng với
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
và sau đó sử dụng số thu được trong LIMIT
mệnh đề
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Thật không may, MySQL sẽ không cho phép truy vấn phụ hoặc biến người dùng trong LIMIT
mệnh đề