mysql문에서 끝의 레코드부터 읽어올 수 있는 방법이 있나요?
테이블에서 레코드를 읽어 올때 보통 먼저 입력된 레코드 부터<키값이( 여기에서는 b_no) 작은 값부터> 읽어오게 되는데
뒤에서 부터 (키값이 큰 값부터) 순차적으로 where 조건에 따라서 읽어 오게 하는 방법은 없나요?
예를 들어 어떤 테이블의 첫번째 column이 b_no일 경우
이런 sql명령을 실행하면
mysql> select * from sample where b_no < 7;
+------+-------------+----------------+---------------------+-------+----------+------------+
| b_no | b_title | b_content | b_date | b_hit | b_id | b_password |
+------+-------------+----------------+---------------------+-------+----------+------------+
| 1 | 제목 0001 | 줄거리 0001 | 2016-06-15 12:13:50 | 0 | 장 0001 | 2222 |
| 2 | 제목 0002 | 줄거리 0002 | 2016-06-15 12:13:50 | 0 | 장 0002 | 2222 |
| 3 | 제목 0003 | 줄거리 0003 | 2016-06-15 12:13:50 | 0 | 장 0003 | 2222 |
| 4 | 제목 0005 | 줄거리 0005 | 2016-06-15 12:15:24 | 0 | 장 0005 | 2222 |
| 5 | 제목 0006 | 줄거리 0006 | 2016-06-15 12:15:24 | 0 | 장 0006 | 2222 |
| 6 | 제목 0007 | 줄거리 0007 | 2016-06-15 12:15:24 | 0 | 장 0007 | 2222 |
+------+-------------+----------------+---------------------+-------+----------+------------+
6 rows in set (0.00 sec)
와 같이 출력되고,
다음의 명령어를 쓰면 물론 b_no가 6번부터 display되지만 레코드를 읽는 순서는 역시 b_no가 1인 레코드부터 차례로
b_no가 6번까지 읽어서 단순히 display만 b_no가 6번인 레코드부터 화면에 출력하게 되는데
mysql> select * from sample where b_no < 7 order by b_no desc;
+------+-------------+----------------+---------------------+-------+----------+------------+
| b_no | b_title | b_content | b_date | b_hit | b_id | b_password |
+------+-------------+----------------+---------------------+-------+----------+------------+
| 6 | 제목 0007 | 줄거리 0007 | 2016-06-15 12:15:24 | 0 | 장 0007 | 2222 |
| 5 | 제목 0006 | 줄거리 0006 | 2016-06-15 12:15:24 | 0 | 장 0006 | 2222 |
| 4 | 제목 0005 | 줄거리 0005 | 2016-06-15 12:15:24 | 0 | 장 0005 | 2222 |
| 3 | 제목 0003 | 줄거리 0003 | 2016-06-15 12:13:50 | 0 | 장 0003 | 2222 |
| 2 | 제목 0002 | 줄거리 0002 | 2016-06-15 12:13:50 | 0 | 장 0002 | 2222 |
| 1 | 제목 0001 | 줄거리 0001 | 2016-06-15 12:13:50 | 0 | 장 0001 | 2222 |
+------+-------------+----------------+---------------------+-------+----------+------------+
제가 질문하는 요지는 읽는 것 자체를 b_no가 6인 레코드부터 순차적으로 b_no가 감소되어 b_no가 1번까지
읽을 수 있는 sql 쿼리 방법이 있는지에 대한 질문입니다.
그것이 어렵다면 애초에 레코드가 입력될때 새로 입력되는 레코드가 가장 앞에 위치하게 하면서
먼저 insert되 있던 레코드는 뒤로 밀리게 insert하는 방법이 있는지입니다.
...
정확히 뭘 원하시는지는 잘 모르겠지만, 일반적으로 relational DB는 데이터를 순서가 없는 테이블로 생각하고 처리를 하기 때문에 "가장 앞에 있는 레코드"라는 말 자체가 성립하지 않습니다.
물론 디스크에 저장할 때는 어쨌든 앞에 들어가는 놈이 있고 뒤에 들어가는 놈이 있으니 특정 레코드가 select할 때 계속 앞에 나올 수는 있겠지만 그건 어쩌다 보니 그런 것일 뿐이고, (최소한 SQL 표준 상으로는) "이 레코드가 테이블의 가장 앞/뒤에 있다" 같은 개념은 존재하지 않습니다.
예를들어 레코드가 1500건 있을때에 8개씩 뒤에서
예를들어 레코드가 1500건 있을때에
8개씩 뒤에서 부터 읽어(즉 1493번째 부터 마지막 1500번째까지)들일때에
중간중간에 레코드가 삭제 되어 있을때에 읽어 들일 8개의 레코드의 첫번째 레코드를 지정할 방법이 없다는 것입니다.
(중간중간 레코드가 삭제 되있어 primary key가 순서대로 되 있지 않아서
8개 레코드의 첫번째 레코드의 primary key에 해당하는 꼭 primary key가
아니더라도 하여간 컬럼값을 알아야 where조건을 적용 시킬 수 있기 때문에요)
다시 말씀드리면, 예를 들어 위 테이블의 상위
다시 말씀드리면,
예를 들어 위 테이블의 상위 3개(물론 4개도 될수있고 5개도 될수 있는
즉 프로그램에서 변수로 지정 할 수 있도록 할 경우)를
b_no를 지정하지 않고 무조건 읽어 올 방법이 없는 가입니다.
인터넷에서 찾아 보니 set TOP from table_name 뭐 이런 식의 방법을 써놓은 것을 보았는데
잘 않되는군요.
음....?
질문 요지가 그러니까 저장된 레코드 순서대로 몇개씩 읽어들이고 싶다 그뜻인가요?
select * from table_name limit 읽을갯수 offset 읽을위치
ㄴ이거 원하시는 건가요?
대단히 감사합니다. 바로 찝어 주셨네요. mysql
대단히 감사합니다. 바로 찝어 주셨네요.
mysql 명령어에 대해 잘 설명되 있는 사이트도 혹시 아시면 부탁드려도 될까요?
그런데 limit과 offset을 사용시에 order
그런데 limit과 offset을 사용시에 order by 컬럼명 desc와 같이
내림차순으로 정렬은 않되나요?
이렇게 하면 되네요. select * from
이렇게 하면 되네요.
select * from board_free order by b_no desc limit 10 offset 810;
감사합니다!!
혹시 같은 질문을 가지는 분을 위해 메모를
혹시 같은 질문을 가지는 분을 위해 메모를 남긴다면
order by 컬럼명 desc 가 없을시는 앞쪽에서부터 offset값이 적용되고
order by 컬럼명 desc 가 있을때에는 뒤에서부터 offset값이 적용됩니다.
여하튼 앞의 mauri님께 감사드립니다.
댓글 달기