[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.ASC에 DESC를 변경하고 당신은 당신이 원하는 레코드를 얻을 것이다,하지만 당신은 그들이 당신이 그들이 와서 순서를 반대로해야합니다, 주문이 필요합니다. 당신이 중 하나를 자신의 코드에 그렇게 할 수하거나 같은 쿼리를 확장 그래서:
ASC에 DESC를 변경하고 당신은 당신이 원하는 레코드를 얻을 것이다,하지만 당신은 그들이 당신이 그들이 와서 순서를 반대로해야합니다, 주문이 필요합니다. 당신이 중 하나를 자신의 코드에 그렇게 할 수하거나 같은 쿼리를 확장 그래서:
select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC;
당신은 정말 항상 절에 의해 ASC 또는 DESC 단지를 주문을 지정해야합니다.
-
==============================
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.약간 개선 답 :
약간 개선 답 :
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.이 시도,
이 시도,
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.테이블은 기본 키의 자동 증가 (예를 들어 일부 "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.쿼리에서 DESC 테이블 별칭으로 해석됩니다.
쿼리에서 DESC 테이블 별칭으로 해석됩니다.
ρяσѕρєя K에서 언급 한 바와 같이, 정렬 방향을 지정 할 수 있도록, 당신은 ORDER BY 절에 처음으로 정렬해야합니다.
하나, 또는 테이블의 기본 키와 같은 autoincrementing 열이있는 경우 열은 타임 스탬프해야한다 분류한다.
-
==============================
7.
select * from (select * from table_name order by yourfield ASC limit 10) order by yourfield DESC;
이보다 더 나은 솔루션을 가질 수 없습니다.
-
==============================
8.
cursor.moveToLast(); while (cursor.moveToPrevious()){ //do something }
tblmessage 타임 스탬프 내림차순 제한 10 SELECT * FROM : 같은 쿼리
from https://stackoverflow.com/questions/14018394/android-sqlite-query-getting-latest-10-records by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가져 오기 데이터는 두 날짜 사이에 게시 (0) | 2020.06.28 |
---|---|
[SQL] 오류 : mysqlnd 이전 불안 인증을 사용하여 4.1 MySQL로 연결할 수 없습니다 (0) | 2020.06.28 |
[SQL] 너무 많은 시간을내어 오라클 삭제 쿼리 (0) | 2020.06.28 |
[SQL] MYSQL 쿼리가 동일한 열에 만족시키기 (0) | 2020.06.28 |
[SQL] MySQL의 여러 Where 절 (0) | 2020.06.28 |