복붙노트

[SQL] 안드로이드 SQLite는 쿼리 - 최신 10 개 개의 레코드를 얻기

SQL

안드로이드 SQLite는 쿼리 - 최신 10 개 개의 레코드를 얻기

내 안드로이드 응용 프로그램에서 저장 한 데이터베이스를 가지고 있고 DB에 삽입 지난 10 메시지를 검색 할 수 있습니다.

때 내가 사용 :

Select * from tblmessage DESC limit 10;

그것은 나에게 10 개의 메시지를 제공하지만, TOP에서. 하지만 지난 10 메시지를합니다. 그것은 수 있습니까?

입니다 전체 테이블의 데이터를 가정 -

1,2,3,4,5....30

나는 tblmessage 타임 스탬프 내림차순 제한 10에서 쿼리를 선택 *를 썼다

그것은 30,29,28 보여줍니다 ... (21)

하지만 같은 순서 원하는 - 21,22,23를 ... (30)

해결법

  1. ==============================

    1.ASC에 DESC를 변경하고 당신은 당신이 원하는 레코드를 얻을 것이다,하지만 당신은 그들이 당신이 그들이 와서 순서를 반대로해야합니다, 주문이 필요합니다. 당신이 중 하나를 자신의 코드에 그렇게 할 수하거나 같은 쿼리를 확장 그래서:

    ASC에 DESC를 변경하고 당신은 당신이 원하는 레코드를 얻을 것이다,하지만 당신은 그들이 당신이 그들이 와서 순서를 반대로해야합니다, 주문이 필요합니다. 당신이 중 하나를 자신의 코드에 그렇게 할 수하거나 같은 쿼리를 확장 그래서:

    select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC;
    

    당신은 정말 항상 절에 의해 ASC 또는 DESC 단지를 주문을 지정해야합니다.

  2. ==============================

    2.대용량 데이터베이스에서 ORDER BY DESC 문 정말 시스템이 느려질 수 있습니다, 예를 들어, 라즈베리 파이. ORDER BY를 피하는 좋은 방법은 OFFSET 명령입니다. 그리고 당신도 저장된 순서를 유지 :

    대용량 데이터베이스에서 ORDER BY DESC 문 정말 시스템이 느려질 수 있습니다, 예를 들어, 라즈베리 파이. ORDER BY를 피하는 좋은 방법은 OFFSET 명령입니다. 그리고 당신도 저장된 순서를 유지 :

    SELECT * FROM mytable LIMIT 10 OFFSET (SELECT COUNT(*) FROM mytable)-10;
    

    참조 : http://www.sqlite.org/lang_select.html

    성능을 함께 체크 아웃 :

    .timer ON
    
  3. ==============================

    3.약간 개선 답 :

    약간 개선 답 :

    select * from (select * from tblmessage order by sortfield DESC limit 10) order by sortfield ASC;
    

    마이클 딜런은 그의 대답에 올바른 생각을했다,하지만 예는 처음 몇 행, 반전 순서를 제공합니다 :

    select * ... (select * ... ASC limit 10) ... DESC
    

    그는 마지막 원이되어야합니다 :

    select * ... (select * ... DESC limit 10) ... ASC
    
  4. ==============================

    4.이 시도,

    이 시도,

    SQLiteDatabase database = getReadableDatabase();
    Cursor c=database.rawQuery("sql Query", null);
    if(c.moveToFirst) {
        int curSize=c.getCount()  // return no of rows
        if(curSize>10) {
           int lastTenValue=curSize -10;
           for(int i=0;i<lastTenValue;i++){
              c.moveToNext();
           }
        } else {
           c.moveToFirst();
        }
    }
    

    그리고 지난 10 개 데이터를 검색 할 수 있습니다.

  5. ==============================

    5.테이블은 기본 키의 자동 증가 (예를 들어 일부 "ROW_ID")와 열을 포함한다면 당신은이 열을 기준으로 DESC 순서와 선택 하나 필요

    테이블은 기본 키의 자동 증가 (예를 들어 일부 "ROW_ID")와 열을 포함한다면 당신은이 열을 기준으로 DESC 순서와 선택 하나 필요

    같은 원시 요청 외모

    select * from table_name order by row_id DESC limit 10
    

    안드로이드 구현은

    private Cursor queryLastEvents() {
        return getDatabase().query("table_name", null, null, null, null, null, "row_id DESC", "10");
    }
    
  6. ==============================

    6.쿼리에서 DESC 테이블 별칭으로 해석됩니다.

    쿼리에서 DESC 테이블 별칭으로 해석됩니다.

    ρяσѕρєя K에서 언급 한 바와 같이, 정렬 방향을 지정 할 수 있도록, 당신은 ORDER BY 절에 처음으로 정렬해야합니다.

    하나, 또는 테이블의 기본 키와 같은 autoincrementing 열이있는 경우 열은 타임 스탬프해야한다 분류한다.

  7. ==============================

    7.

    select * from
    (select * from table_name order by yourfield ASC limit 10)
    order by yourfield DESC;
    

    이보다 더 나은 솔루션을 가질 수 없습니다.

  8. ==============================

    8.

    cursor.moveToLast();
    while (cursor.moveToPrevious()){
           //do something
    }
    

    tblmessage 타임 스탬프 내림차순 제한 10 SELECT * FROM : 같은 쿼리

  9. from https://stackoverflow.com/questions/14018394/android-sqlite-query-getting-latest-10-records by cc-by-sa and MIT license