2013-06-04 3 views
0

테이블이 있습니다 (오히려 추한 디자인이지만, 어쨌든), 문자열로만 구성되어 있습니다. 최악의 상황은 시간을두고 기록을 추가하는 스크립트가 있다는 것입니다. 레코드는 절대로 삭제되지 않습니다.파일의 마지막 레코드를 얻으십시오

MySQL 저장소는 임의 액세스 파일로 레코드를 저장합니다. 레코드의 최대 길이를 알고 EOF를 찾을 수 있기 때문에 C 언어 등으로 마지막 또는 다른 레코드를 얻을 수 있습니다.

MySQL에서 "SELECT * FROM table"과 같은 작업을 수행 할 때 모든 레코드를 올바른 순서로 가져옵니다. MySQL은이 파일을 처음부터 끝까지 읽습니다. 나는 마지막 것만 필요하다.

ORDER BY없이 MySQL 쿼리만을 사용하여 마지막 레코드 (또는 레코드)를 가져 오는 방법이 있습니까?


글쎄, 난 거기에 더 나은 솔루션입니다, 내가 알려 주시기 바랍니다 나의 현재 쿼리가

SELECT 
    @i:[email protected]+1 AS iterator, 
    t.* 
FROM 
    table t, 
    (SELECT @i:=0) i 
ORDER BY 
    iterator DESC 
LIMIT 5 

, 나는 해결책 here을 발견했습니다 가정!

+0

스키마에 AUTO INCREMENT 열이 있습니까? –

+0

왜 주문하지 않습니까? 주문은 올바른 방법입니다. –

+0

ORDER BY를 사용하고 해당 열에 인덱스를 넣어야합니다. – user1032531

답변

2

ORDER BY을 사용하지 않으면 주문이 보장되지 않습니다. 당신이 돌아오고있는 기록이 필요로하는 방식으로 분류되는 것입니다.

+0

예, 보장되지는 않지만 임의 액세스 파일이므로 레코드를 삭제하지 않습니다. 최신 정보는 항상있을 것입니다. 결국 나는 다른 방법을 사용하여 그것들을 얻을 수 있습니다. 그러나 MySQL 기능을 사용할 수있는 방법이 있는지 궁금합니다. – shomel

+0

반품 된 주문이 실제 주문에 의한 것이라고 할 수 있습니다. 정렬 할 수있는 열이 있어야하며 Bere가 제안한대로 시도 할 수 있습니다. – Kermit

1

여기에는 키 (예 : 기본 키)의 중요성이 나와 있습니다. primary key columnauto_increment 기본값을 추가하여 테이블을 수정할 수 있습니다. 그럼 당신은

select * from your_table where id =(select max(id) from your_table);

를 조회하고 마지막으로 삽입 된 행을 얻을 수 있습니다.

+0

예, 나는 테이블이 못생긴 설계 인 것을 알고 있습니다 만, 변경하지 않고 그것을 할 수 있습니까? – shomel

+0

@shomel 일단 당신이 당신의 테이블이 추한 것을 알게되면, 그것을 수정하기위한 적절한 시간 인 '꼬집음'을 느끼기 시작합니다. :) – Bere

관련 문제