database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 27778 게시물 읽기
No. 27778
무한카테고리에서 하위 카테고리의 게시물 전부 가져오기
작성자
제로당
작성일
2008-09-10 14:00ⓒ
2008-09-10 23:15ⓜ
조회수
6,418

이런구조의 게시판과

Board : category,num,title,writer,contents,views


이런구조와 내용의 카테고리가 있을때

category : name,relate,number

컴퓨터 1,1

c 1,2

java 1,3

sql 1,4

jsp 3,5

rmi 3,6

struts 5,7

struts2 5,8



java를 선택하면 하위카테고리인 jsp,rmi,struts,struts2에 

해당하는 게시물 전부 가져오게 하고 싶습니다.


제가 지금 생각하고 있는 것은 아래와 같습니다.

프로그램으로 java의 하위 카테고리를 가져온 다음,(jsp,rmi)

가져온 하위카테고리로 그 다음 하위 카테고리를 가져오는것을(struts,struts2)

하위카테고리가 안나올때 까지 반복해서 그 전부를 인자로 union시키는 것인데요(java,jsp,rmi,struts,struts2)


Select * From

(

 select * from Board where category='java'

 union

 select * from Board where category='jsp'

 ...

 ...

 select * from Board where category='struts2'

)

Order by num desc


이렇게하면 카테고리가 얼마 없을때는 상관없는데,

많을경우에는 시간이 많이 걸릴거 같습니다.

게다가 마지막에 게시물 번호로 정렬하니 더 그럴듯...


뭔가 더 좋은 방법 없을까요?


아시는 분 계시면 한수 가르침 부탁드립니다.


그럼 오늘도 좋은 하루 되세요^^

이 글에 대한 댓글이 총 4건 있습니다.

제가 질문을 잘 이해하지는 못하겠지만 query만 보고 말씀을 드리면



아래의 쿼리면


SELECT *

FROM Board

WHERE category IN ( 'java', 'jsp', 'struts2' )

ORDER BY num DESC


적어 놓으신 query문과 동일할거 같은데요..


우욱님이 2008-09-10 16:11에 작성한 댓글입니다. Edit

//우욱님

답변 정말 고맙습니다m(__)m


혹시 하위 카테고리의 목록을 sql로 가져오는 방법 아시나요?


프로그램으로 하려면 못할건 없겠는데,


하위 카테고리가 안나올때 까지 하위 카테고리를 가져오려면


위 글에 써진대로 java의 하위 카테고리 가져오는 것만 해도

밑의 것처럼 5번 쿼리를 날려야 되니 카테고리가 많으면 많이 느려질거 같습니다.

(Select name,relate,number From category Where relate=3) -> 5,6

(Select name,relate,number From category Where relate=5) -> 7,8

(Select name,relate,number From category Where relate=6) -> null

(Select name,relate,number From category Where relate=7) -> null

(Select name,relate,number From category Where relate=8) -> null


혹시 sql로 가져오는 방법 아시면 조언 부탁드립니다.


좋은하루 되세요^^

제로당님이 2008-09-10 23:13에 작성한 댓글입니다.
이 댓글은 2008-09-10 23:14에 마지막으로 수정되었습니다. Edit

계층적 구조를 RDB 내에 표현하는 많이 알려진 방법은 다음과 같습니다.


CREATE TABLE scategories(

hkey VARCHAR(40) COMMENT'계층ID',

name VARCHAR(30),

PRIMARY KEY ( hkey )

);


INSERT INTO scategories( hkey, name ) VALUES( '0001', '컴퓨터' );

INSERT INTO scategories( hkey, name ) VALUES( '00010001', 'c' );

INSERT INTO scategories( hkey, name ) VALUES( '00010002', 'java' );

INSERT INTO scategories( hkey, name ) VALUES( '00010003', 'sql' );

INSERT INTO scategories( hkey, name ) VALUES( '000100020001', 'jsp' );

INSERT INTO scategories( hkey, name ) VALUES( '000100020002', 'rmi' );

INSERT INTO scategories( hkey, name ) VALUES( '0001000200010001', 'struts' );

INSERT INTO scategories( hkey, name ) VALUES( '0001000200010002', 'struts2' );



위와 같이 data가 입력이 되어있는 경우 java 카테고리 하위의 모든 카테고리를 긁어내고 싶다면

SELECT * FROM scategories WHERE hkey LIKE '00010002%';

와 같이 수행할 수 있습니다.


data가 많이 쌓인 후에

EXPLAIN SELECT * FROM scategories WHERE hkey LIKE '00010002%';

을 해보시면 특별한 hint 없이도 index를 잘 타고 있는 것을 보실 수 있습니다.




그리고 저 개인적으로는 저 길고도 긴 key를 주구리 장창 달고 다니기 보다는 계층에 대한 부분은 따로 table로 떼어 내고 simple한 정수값으로 ID를 가지고 있도록 하는 편입니다.




사실 MS-SQL 2008에서는 위와 같은 부분을 recursive하게 보이는 query문으로 처리할 수 있도록 해주고 있습니다.(쵸큼 부럽죠.. -.-;; )


MySQL에서도 naiive하게 지원해주기 전에는 제가 위에 적어 놓은 방법이 아직까지는 계층구조를 표현하는 대표적인 방법으로 알려져 있습니다.


물론 depth별로 구분자(예를 들어 '/' 같은 문자)를 두어서 '/0001/0003/0153/'식으로 사용할 것인지 말것인지에 대한 부분, 하나의 depth에 9999개 이상은 어떻게 할지에 대한 부분, 등등 여러 이슈사항이 남아있지만 뭐 하나하나 꺼내자면 얘기가 너무 길어지므로 대충 이정도에서 마무리를 하는게 좋지 않을까.. ^.^;;

우욱님이 2008-09-16 10:20에 작성한 댓글입니다.
이 댓글은 2008-09-16 10:26에 마지막으로 수정되었습니다. Edit

//우욱님
매번 정말 고맙습니다.

이런식으로도 카테고리를 나타낼 수 있구나라는걸 
알게되어 많은 공부 되었습니다.

한가지 아쉬운게 비지니스로직상 우욱님이
가르쳐주신 방법으로는 검색이 안되는 카테고리가
나올수 있어서 저희가 쓸수 없네요...

관련번호를 힌트로 검색해 내는 방법이 있으면 좋겠는데...
음...

답변 항상 감사드리구요
좋은 하루 되세요^^*

제로당님이 2008-09-19 16:37에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
27781쿼리문의 속도문제 (left join)
영환
2008-09-11
4221
27780해당월의 몇주째인지 select 하고 싶어요~ [4]
길성석
2008-09-10
8408
27779여러테이블의 값을 join해서 하나의 칼럼으로 만들고 싶습니다.
이상재
2008-09-10
3765
27778무한카테고리에서 하위 카테고리의 게시물 전부 가져오기 [4]
제로당
2008-09-10
6418
27777mysql 4.0.X (euc_kr) 데이터를 MySQL4.1 (utf-8)로 이전하고싶습니다. [1]
이준규
2008-09-09
4424
27776트리거 생성시 변수사용 아시는분..
떠돌이
2008-09-09
4045
27775[질문] 데이터베이스 생성 오류입니다. [1]
고준영
2008-09-08
5202
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다