login register Sysop! about ME  

2021년 03월 03일 11시 09분 00초,     조회수 : 202
  제목 : asp 트리구조 쿼리문 문의드립니다.
SEQ : 164318 글쓴이 : rkrkapf153

작성 포맷 : TEXT 모드, 자동 줄바꿈 사용

CREATE TABLE [dbo].[tree_tbl](
	   [idx] 	   	   [int] IDENTITY(1,1) NOT NULL,
	   [tree_up] 	   [int] NOT NULL,
	   [tree_depth] 	   [int] NOT NULL,
	   [tree_name] 	   [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO


insert into tree_tbl (tree_up, tree_depth, tree_name) values (0, 1, '패션의류');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (0, 1, '식품');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (0, 1, '생활용품');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (0, 1, '자동차용품');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (1, 2, '남성패션');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (1, 2, '여성패션');;

insert into tree_tbl (tree_up, tree_depth, tree_name) values (2, 2, '과일');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (2, 2, '과자');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (2, 2, '커피');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (3, 2, '세탁세제');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (3, 2, '욕실용품');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (3, 2, '생활잡화');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (4, 2, '인테리어');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (4, 2, '세차용품');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (4, 2, '차량용전자기기');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (5, 3, '의류');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (5, 3, '신발');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (5, 3, '가방');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (7, 3, '사과');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (7, 3, '포도');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (7, 3, '수박');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (7, 3, '참외');

insert into tree_tbl (tree_up, tree_depth, tree_name) values (17, 4, '운동화');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (17, 4, '축구화');
insert into tree_tbl (tree_up, tree_depth, tree_name) values (17, 4, '등산화');


테이블 구조는 위와 같고 데이터를 insert 했습니다.


그리고 asp 소스는 아래와 같습니다.


============================================================
<!--#include virtual ="dbconn.asp"-->

<!DOCTYPE html>
<html lang="ko">
<head>
<title></title>
<meta charset="UTF-8" />

<style type="text/css">
    .tree_1 { display:block; margin-left:100px; }
    .tree_2 { display:block; margin-left:200px; }
    .tree_3 { display:block; margin-left:300px; }
    .tree_4 { display:block; margin-left:400px; }
</style>

</head>

<body>

<%
    Function sub_tree(tree_up, tree_depth)

        sql = "select * from tree_tbl where tree_up = " & tree_up & " and tree_depth = " & tree_depth & " order 
by idx asc;"
        set rs = server.createobject("ADODB.Recordset")
        rs.Open sql,db,1

        Do until rs.BOF or rs.EOF
            rs_idx          = rs("idx")
            rs_tree_depth   = rs("tree_depth")
            rs_tree_name    = rs("tree_name")
        %>
            <div class="tree_<%=rs_tree_depth %>"><%=rs_tree_name %></div>
        <%
            Call sub_tree(rs_idx, rs_tree_depth+1)

        rs.MoveNext
        Loop

    End Function
%>
<%
    Call sub_tree(0, 1)
%>

</body>
</html>
============================================================

결과가 원하는 대로 나오기는 하는데 데이터 양이 많아질 경우 함수 호출을 그만큼 많이 하게 되니 속도가 매우 느려집니다.

같은 트리구조가 나오게 한방에 쿼리를 작성할 수는 없을까요?

단계적으로 불러오게 만들면 되긴 하는데 
소스가 다 보여야 한다고 해서 데이터를 미리 다 불러와야 합니다.


  angel
  2021-03-04(09:49)
캐릭 이미지
sql 인덱스 생성 하심 속도 개선 됩니다.

한방에 가져와도 배열에 담아서 해야 하니 한계가 있을듯 합니다.

  hskim618
  2021-03-06(11:23)
캐릭 이미지
결과가 제대로 나오신다고 하니 제가 코드를 잘못 이해하고 있는 지 모르겠지만
Do until 문 안에 있는 Call sub_tree() 함수를 삭제해야 할 것 같습니다.
재귀 호출을 하고 있으니 데이터 개수만큼 쿼리를 할 것 같습니다.



제목 작성자 날짜 조회
asp 트리구조 쿼리문 문의드립니다. (2) rkrkapf153 2021-03-03 202

 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})