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
운영게시판
최근게시물
Oracle Q&A 2203 게시물 읽기
No. 2203
답변형(계층형) 게시판 구현할때 ... 최고의 알고리즘 임당.
작성자
디슨
작성일
2000-11-28 12:18
조회수
5,799

안녕하세용...

 

오라클용 게시판을 만들고 있는 오라클 초봄니당. -_-;

 

답변형 게시판을 구현할때 보통 4개 정도의 필드를 사용하고

리스트 출력할때도 그만큼 속도도 느린 알고리즘으로 되있는데 전 다른 방식으로

구현을 해 봤습니다.

 

답변형 게시판에 대해 많이 뒤져보다 보니 Index 키를 double형으로 해서 답변형 게시판을 구현을 한 사람이 있더군요...

 

저도 나름대로 index 를 double형으로 구현해 봤습니다.

이렇케 하면 좋은점은 글 쓰기를 할때는 약간 느려질지는 모르니만..

 

일반적으로 글 쓰기보다 리스트 보기가 히트가 많이 되므로.. 리스트 뿌려주는데

최상의 속도가 최고의 게시판이라고 생각합니다.

 

아래는 허접한 실력으로 구현한 글쓰기 부분이며

계층으로 리스트 뿌려줄때는 그냥 order by seq desc 일케 하면 됩니당.

 

아래 소스에서 허접한 부분이 있으리라 이 초보는 생각하는데... 정보 공유의 정신으로 올니니깐...

부족한 부분은 고수님들의 답변을 부탁드립니다.

 

if($exec == "okreply") {

$seq1 = explode(".", $seq); //소수점 구분

$seq2 = strlen($seq1[1]); //minus1 구하기

 

if($seq2 < 1) {

$seq3 = (int)($seq -1);

$seqx = $seq3.".";

} else {

$seq3 = substr($seq1[1],$seq2-1,1) -1;

//요것이 한계에 다다를때 에러나는 부분

if($seq3 < 1) { message("이 게시판은 더이상 답변할 수 없도록 설정 되어 있습니다.","Y"); exit;}

$seq4 = $seq1[0].".".substr($seq1[1],0,$seq2-1);

$seqx = $seq4.$seq3;

}

$s2 = $seqx."2";

$s3 = $seqx."3";

$s4 = $seqx."4";

$s5 = $seqx."5";

$s6 = $seqx."6";

$s7 = $seqx."7";

$s8 = $seqx."8";

$s9 = $seqx."9";

 

$que = "SELECT count(*) FROM $table_id WHERE

seq=$s2 or

seq=$s3 or

seq=$s4 or

seq=$s5 or

seq=$s6 or

seq=$s7 or

seq=$s8 or

seq=$s9 ";

$stmt = OCIParse($conn,$que);

OCIDefineByName($stmt,"COUNT(*)",&$count);

OCIExecute($stmt);

OCIFetch($stmt);

OCIFreeStatement($stmt);

 

$minus2 = $count + 1;

$minus1 = "";

while($seq2){

$minus1 .= "0";

$seq2 -= 1;

}

$minus = "0.".$minus1."$minus2";

$dseq = (double)($seq - $minus);

 

// 답변글 메일받기 일때

$que = "SELECT email,remail FROM $table_id where seq=$seq";

$stmt = OCIParse($conn,$que);

OCIDefineByName($stmt,"EMAIL",&$pre_email);

OCIDefineByName($stmt,"REMAIL",&$pre_remail);

OCIExecute($stmt);

OCIFetch($stmt);

OCIFreeStatement($stmt);

 

if($pre_remail) { ok_sendmail($pre_email); }

 

 

}

//답변이 아닌 그냥 글쓰기 일때

else {

$que = "SELECT seq FROM $table_id order by seq desc";

$stmt = OCIParse($conn,$que);

OCIDefineByName($stmt,"SEQ",&$temp);

OCIExecute($stmt);

 

OCIFetch($stmt);

OCIFreeStatement($stmt);

 

$dseq = (double)($temp + 1);

}

 

$que = "INSERT INTO $table_id VALUES(

$dseq,

'$name',

.

.

.

)";

$stmt = OCIParse($conn,$que);

OCIExecute($stmt);

OCIFreeStatement($stmt);

 

if ($conf[SENDMAIL]) { //관리자에게 메일 보내기

if(ok_sendmail($conf[EMAIL])) $message = "관리자에게 성공적으로 메일이 보내졌습니다. ";

}

 

 

--------------------------------- 디슨 생각

[Top]
No.
제목
작성자
작성일
조회
2206ORA-06413 에러에 대해 아시는분.. T.T
조성훈
2000-11-28
3819
2205DBkey? Lock?
unme
2000-11-28
3839
2204컬럼 삭제 방법
초보자
2000-11-28
3522
2208┕>Re: 컬럼 삭제 방법
ora_man
2000-11-28 16:58:23
4449
2209┕>Re: 컬럼 삭제 방법
최성준
2000-11-28 19:46:04
4024
2203답변형(계층형) 게시판 구현할때 ... 최고의 알고리즘 임당.
디슨
2000-11-28
5799
2201데비안 과 816 ...
웅찬
2000-11-28
3547
2200wow linux + oracle8.0.5 설치시 db object생성에 실패합니다.
조성훈
2000-11-28
3029
2213┕>Re: wow linux + oracle8.0.5 설치시 db object생성에 실패합니다.
엉엉엉
2000-11-29 01:20:28
3983
2197로그인이 되지 않아요...ㅜㅜ
초보남
2000-11-28
3442
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다