2012-05-08 6 views
9

Zasadniczo próbuję utworzyć pasek "celu". Cel jest określany przez pobranie ostatniego wpisu dokonanego w tabeli MySQL. Dlatego chcę uzyskać identyfikator ostatniego wpisu.Pobierz ostatni wpis w tabeli MySQL

Jak uzyskać ostatni wpis w tabeli, a następnie uzyskać identyfikator z ostatniego wpisu?

(Korzystanie z PHP)

+0

Czy masz automatycznie zwiększane pole, takie jak "id"? –

+0

Musisz nagrać znacznik czasu, aby upewnić się, że otrzymujesz najnowszy wpis. –

+0

@MichaelMior, Absolutnie nie! Znacznik czasu nie ma w pobliżu rozdzielczości, aby to zagwarantować. – Brad

Odpowiedz

25

Aby uzyskać największą ID:

SELECT MAX(id) FROM mytable 

Następnie, aby uzyskać wiersz:

SELECT * FROM mytable WHERE id = ??? 

Albo, możesz zrobić to wszystko w jednym zapytaniu:

SELECT * FROM mytable ORDER BY id DESC LIMIT 1 
+0

Dzięki! Sądzę, że inni sprawiali, że było to trochę bardziej skomplikowane niż to musiało być. Myślę, że moje pytanie mogłoby być lepsze. Po prostu potrzebowałem największego id. Dzięki! – ComputerLocus

2

jeśli pole jest automatycznie zwiększany, a następnie można użyć LAST_INSERT_ID

+0

Zakłada to, że właśnie wstawiłeś wiersz. –

6

można użyć tej kwerendy, aby uzyskać pożądane wyniki z tej kwerendy SQL użyte w tym przykładzie:

$sql = "SELECT user_id FROM my_users_table ORDER BY user_id DESC LIMIT 0,1"; 
+0

Dzięki, ale użyję Eric'a, chociaż prawdopodobnie to zadziała! – ComputerLocus

+0

Jest w porządku, kolego. Mam nadzieję, że ten wątek rozwiązał twój problem właściwie =) – dotTutorials

2

Aby to zrobić rzetelnie, trzeba mieć jakieś pole w tabeli, które można zbadaj, aby ustalić, który jest ostatni. Może to być sygnatura czasowa dodawanego rekordu, numer kolejny, który stale się zwiększa (szczególnie automatycznie zwiększający się numer sekwencji) itp.

Załóżmy, że jest to numer sekwencji o nazwie "rec_seq". Można by napisać coś takiego:

select * from my_table 
where rec_seq=(select max(rec_seq) from my_table) 
+0

Wygląda trochę jak odpowiedź Erica, ale będę musiał przyjąć odpowiedź Erica! – ComputerLocus

+0

Nie ma problemu, jego jest nieco prostsze, jest to łatwiejsze rozwiązanie. – Jay

7

można użyć LAST_INSERT_ID() funkcję. Przykład:

$sql = "SELECT * FROM mytable WHERE id = LAST_INSERT_ID()"; 
+0

Dzięki, chociaż użyję tego, na który Eric odpowiedział, ale wygląda na to, że też będzie działać! – ComputerLocus

+3

Uwaga na temat LAST_INSERT_ID: LAST_INSERT_ID podaje identyfikator ostatniego wiersza wstawionego przez bieżące połączenie, a nie pozostałe. – laltin

2

wybrać wszystkie pola z tabeli w odwrotnej kolejności i ustawienie limitu 0,1 to daje ostatni wynik danych pole tabeli

2

Pobierz najnowszą wpisu użytkownik

'SELECT user_id FROM table_name WHERE user_id = '.$userid.' ORDER BY user_id DESC LIMIT 1';