mysql sql에 대한 질문입니다.

mysql sql에 대한 질문입니다.

QA

mysql sql에 대한 질문입니다.

본문

1982203833_1621311762.9438.png

 

mysql sql에 대한 질문입니다.

 

select * from board order by num asc, re asc;

 

이렇게 하니까 그림과 같이 리스트 됩니다.

 

no와 re가 4번과 6번인 글들은 원글(num)에 답변글(re = 원글 no)입니다.

4번과 6번 글들이 각각 그룹으로 리스트되게 하려면 sql을 어떻게 해야 하나요?

 

꼭 desc 보다 asc로 불렀으면 합니다.
그건 필요하면 제가 num 값을 반대로 바꾸겠습니다.

 

 


=========================================================
테이블 구조는 아래와 같습니다.

 

create table `test` (
  `no` int(255) not null auto_increment,
  `num` double default '0',
  `re` int(255) default null,
  primary key (`no`)
) engine=myisam default charset=utf8 auto_increment=1 ;


insert into `test` values ('', '1', 0);
insert into `test` values ('', '2', 0);
insert into `test` values ('', '2.00000000001', 2);
insert into `test` values ('', '2.00000000002', 2);
insert into `test` values ('', '2.000000003', 4);
insert into `test` values ('', '2.000000004', 4);
insert into `test` values ('', '2.000000005', 4);
insert into `test` values ('', '2.00000000003', 2);
insert into `test` values ('', '3', 0);
insert into `test` values ('', '2.0000005', 6);
insert into `test` values ('', '2.0000006', 6);
insert into `test` values ('', '2.0000007', 6);

 

 


=========================================================
num에 double 보다 더 빠르고 효과적인 자료형이 있나요?

 

 


=========================================================

 

실수형을 asc로 불러오면 빠를 것 같아 소수점으로 구성해 봤습니다.

다른 로직을 참고하니 댓글을 달때 위 댓글들의 구분 번호를 모두 업데이트해야 하더군요.
그리고 desc로 불어와야 하더군요.

desc 보다 asc가 빠르죠.
그리고 업데이트는 게시판이 많은 포털의 경우 서버에 부담되지 않을까요?

그래서 서버에 부담없게 업데이트없이 asc로 불러오려 실수형 소수점으로 구성해 봤습니다.

 

 


=========================================================

mysql에 order by 옵션이 없지는 않을것 같은데요.

이 질문에 댓글 쓰기 :

답변 3

orcale에 connected by라는 게 있는데

MariaDB 10.2+ and MySQL 8.0.1+

에서는  Recursive Common Table Expressions(CTE)라는 게 있습니다.

https://mariadb.com/kb/en/recursive-common-table-expressions-overview/

3487075365_1621374698.5262.png

 

이게 원하시는 게 맞는지 모르겠군요.

1. 이 db table이 뭐 하는 용도인가요? 몇 건이나 저장할 계획인가요?

 

2.원글(num)에 답변글(re = 원글 no)입니다.

4번과 6번 글들이 각각 그룹으로 리스트되게 하려면

== 이해가 안 갑니다.

 

3. num이 무엇을 저장하는 건가요?

용도는 게시판입니다.
게시판 로직을 실험하고 있습니다.

num 답변글의 순서이며 re(자식글)는 no(부모글)과의 관계입니다.

그림에 보시면 색으로 4번 그룹,  체크박스로 6번 글이 그룹되어 있죠.

no=2 그리고 re=2인 글들이 있죠. 이들이 그룹으로 묶여서 num 순으로 리스트되기를 바랍니다.
(지금은 떨어져 있죠)

no=4 그리고 re=4인 글들이 있죠.
no=6 그리고 re=6인 글들이 있죠.
이들 역시 그룹으로 묶여서 num 순으로 리스트되기를 바랍니다.
(지금은 떨어져 있죠)

no와 re를 그룹지어 num 순으로 asc하는 방법이 없을까요?

글실력이 부족해 설명이 제대로 됐는지 모르겠습니다.

질문자입니다.

그림과 같이 리스되었으면 합니다.

 

1982203833_1621368637.5015.png

 

select * from test order by num asc, re_no asc;

이렇게 하니까 왼쪽 그림과 같이 리스트 됩니다.
오른쪽 그림 같이 리스되게 했으면 하는데요.

 

no와 re_no는 부모글과 자식글의 관계입니다.

 

no는 원글
re_no는 답변글(re_no = 원글 no)입니다.

오른쪽 그림과 같이 원글과 답변글이 그룹으로 리스트었으면 합니다.
그리고 num이 asc로 리스트되었으면 합니다.

 sql을 어떻게 하면 되나요?

꼭 desc 보다 asc로 불렀으면 합니다.

 

==========================================================================

테이블 구조가 아래와 같이 변경되었습니다.

 

CREATE TABLE `test` (
  `no` int(255) NOT NULL AUTO_INCREMENT,
  `num` double DEFAULT '0',
  `re_no` int(255) DEFAULT NULL,
  PRIMARY KEY (`no`)
);


insert into test values ('', '-1', '0');
insert into test values ('', '-2', '0');
insert into test values ('', '-1.999', '2');
insert into test values ('', '-1.998', '2');
insert into test values ('', '-1.997', '2');
insert into test values ('', '-3', '0');
insert into test values ('', '-1.99799', '4');
insert into test values ('', '-1.99798', '4');
insert into test values ('', '-1.99797', '4');
insert into test values ('', '-1.9979799', '8');
insert into test values ('', '-1.9979798', '8');
insert into test values ('', '-1.9979797', '8');

 

 

==========================================================================

num에 double외 더 빠르고 효과적인 자료형은 없나요?

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT