Jak mogę SELECTostatni wiersz w tabeli MySQL?
Ja INSERTing danych i trzeba pobrać wartość kolumny z poprzedniego rzędu.
Jest auto_incrementw tabeli.
auto_increment. Chciałbym jeden ostatnio dodany.
Jak mogę SELECTostatni wiersz w tabeli MySQL?
Ja INSERTing danych i trzeba pobrać wartość kolumny z poprzedniego rzędu.
Jest auto_incrementw tabeli.
auto_increment. Chciałbym jeden ostatnio dodany.
Odpowiedzi:
Tak, jest tam auto-wzrost
Jeśli chcesz ostatni z wszystkich wierszy w tabeli, to w końcu MAX(id)jest to właściwy moment ! Rodzaj:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
idjest indeksowany.
Należy pamiętać, że tabele w relacyjnych bazach danych to tylko zestawy wierszy. A zbiory matematyki są nieuporządkowanymi zbiorami. Nie ma pierwszego ani ostatniego rzędu; brak poprzedniego lub następnego rzędu.
Najpierw musisz posortować zestaw nieuporządkowanych wierszy według jakiegoś pola, a następnie możesz iterować po zestawie wyników w zdefiniowanej kolejności.
Ponieważ masz pole automatycznego zwiększania, zakładam, że chcesz, aby było to pole sortowania. W takim przypadku możesz wykonać następujące czynności:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Zobacz, jak najpierw sortujemy zestaw nieuporządkowanych wierszy według your_auto_increment_field(lub jakkolwiek to się nazywa) w kolejności malejącej. Następnie ograniczamy zestaw wyników do tylko pierwszego wiersza za pomocą LIMIT 1.
Możesz połączyć dwa zapytania sugerowane przez @spacepille w jedno zapytanie, które wygląda następująco:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Powinien działać błyskawicznie, ale na stołach INNODB jest o ułamek milisekundy wolniejszy niż ORDER + LIMIT.
answered Jun 14 at 9:41, czyli około 1 rok i 6 miesięcy wcześniej :)
w tabelach z wieloma wierszami są dwa zapytania prawdopodobnie szybsze ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Po prostu użyj: PDO::lastInsertId
Jeśli chcesz ostatnio dodany, dodaj znacznik czasu i wybierz opcję uporządkowaną w odwrotnej kolejności według najwyższego znacznika czasu, limit 1. Jeśli chcesz przejść według identyfikatora, posortuj według identyfikatora. Jeśli chcesz użyć tego, który TYLKO dodałeś, użyj mysql_insert_id.
Prawie każda tabela bazy danych zawiera kolumnę auto_increment (ogólnie id)
Jeśli chcesz ostatni z wszystkich wierszy w tabeli,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
LUB
Możesz połączyć dwa zapytania w jedno zapytanie, które wygląda następująco:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
To zapytanie służyło do pobrania ostatniego rekordu w tabeli.
Wiele odpowiedzi tutaj mówi to samo (zamów według automatycznego przyrostu), co jest OK, pod warunkiem, że masz indeksowaną kolumnę z automatyczną inkrementacją.
Na marginesie, jeśli masz takie pole i jest to klucz podstawowy, nie ma ograniczenia wydajności za użycie w order byporównaniu z select max(id). Kluczem podstawowym jest to, w jaki sposób dane są porządkowane w plikach bazy danych (przynajmniej dla InnoDB), a RDBMS wie, gdzie kończą się te dane, i może zoptymalizować order by id + limit 1się tak, aby osiągnąć taki sammax(id)
Teraz droga mniej uczęszczana jest wtedy, gdy nie masz automatycznie zwiększonego klucza głównego. Być może klucz podstawowy to klucz naturalny, który składa się z 3 pól ... Jednak nie wszystko zostało utracone. Z języka programowania możesz najpierw uzyskać liczbę wierszy
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
a następnie użyj uzyskanej liczby w LIMITklauzuli
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Niestety, MySQL nie zezwala na pod-zapytanie lub zmienną użytkownika w LIMITklauzuli