2010-05-05 1 views
18
단순히 조건에 의해 지정된 마지막으로 입력 행을 선택해야

, 예컨대을 선택합니다. 이 작업을 수행하는 간단한 방법이 있습니까? 고맙습니다.MySQL은 마지막으로 삽입 된 행 가장 쉬운 방법

+0

내가 찾은 가장 좋은 대답은 [여기] Pomyk (http://stackoverflow.com/questions/1388025/how-to-get-id-of-the-last-updated에 의해 하나입니다 -row-in-mysql # answer-1751282) – aggregate1166877

답변

35

TIMESTAMP 열의 기본값은 CURRENT_TIMESTAMP입니다. 여기에서 찾을 수있는 유일한 실제 예측 동작입니다.

두 번째로 할 수있는 일은 ORDER BY ID DESC LIMIT 1이며 최신 ID가 가장 큰 값이되기를 바랍니다.

27
SELECT MAX(ID) from bugs WHERE user=Me 
7

동시성에서 최신 레코드가 방금 입력 한 레코드가 아닐 수 있습니다. 기본 키를 사용하여 최신 레코드를 가져 오는 것이 좋습니다.

자동 증가 필드 인 경우 SELECT LAST_INSERT_ID();을 사용하여 방금 만든 ID를 가져옵니다.

+0

'LAST_INSERT_ID()'는 전역 변수입니다. 조건 기반 ID를 반환하지 않습니다. – Matt

+6

이 ** 전용 **은 쿼리하려는 행 다음에 삽입을 수행하지 않으면 작동합니다. 예를 들어 누군가가 ('insert into users ... ') 게시물을 만들고 ('posts into ...'),'last_insert_id()'는 마지막'posts.id'를 참조 할 것입니다. 이 시점에서'last_insert_id()'를 사용하여 마지막 사용자를 선택하는 방법은 없습니다. –

+0

오케이. 나는 그 질문에 대해 오해한다. 고마워. – Wayne

12

이를 달성하는 한 가지 방법은 레코드를 주문하고 1로 제한하는 것입니다. 예를 들어 다음 테이블 ('데이터')이있는 경우입니다.

id | user | price 
    ------------------- 
    1 | me | 40.23 
    2 | me | 10.23 

다음과 같은 SQL 쿼리

select * from data where user='me' order by id desc limit 1 
23

당신은 ORDER BY ID DESC을 사용할 수 있습니다 시도,하지만 당신은 그 길을 갈 경우는 빠른 방법 : 당신은 큰 테이블이 경우

SELECT * FROM bugs WHERE user = 'me' AND ID = (SELECT MAX(ID) FROM bugs WHERE user = 'me') 

, 중요한 차이를 만들 수 있습니다.

심지어 경우에 변수를 설정할 수 있습니다

EDIT 당신이 그것을 필요로 번 이상 (또는 당신은 읽기 쉽게 생각하는 경우).

SELECT @bug_id := MAX(ID) FROM bugs WHERE user = 'me'; 
SELECT * FROM bugs WHERE user = 'me' AND ID = @bug_id; 
+0

나는 실제로 수백 가지의 쿼리를 통해 그것을 타임 아웃했습니다. 'ORDER BY'KEY 'DESC LIMIT 1'은 200 밀리 초 (65 % 이상) 빠를 수 있고 SELECT의 SELECT가 빠를 수 있습니다. 다시, 내 DB는 초소형이고 전체 쿼리는 900 밀리 초 이상 걸리지 않으므로 더 큰 규모의 정렬은 느려질 것이라고 생각합니다. 그런데 다시 MYSQL 구현은 일반적으로 'ORDER BY'KEY 'DESC LIMIT 1'과 같이 일반적으로 최적화 된 쿼리를 사용하므로 최종 결과는 실제로 많이 정렬되지 않고 마지막 결과가 반환됩니다. –

+7

좋아, 그럼 아마 작은 테이블로 빨리. 알고있는 것이 좋다! 단점으로 볼 때, 내 솔루션은 여전히 ​​거대한 테이블에 대해 훨씬 빠릅니다.필자는 약 35,000 개의 행을 가진 테이블을 테스트했으며 ORDER를 사용한 솔루션보다 10 배 더 빠릅니다. – pmrotule

3
SELECT * FROM `table_name` 
ORDER BY `table_name`.`column_name` DESC 
LIMIT 1 
관련 문제