Q & A

시삽: 레드플러스 님 
게시판 이동:
 제목 : Re : 게시판 저장프로시저(SP) 목록 페이징처리한거 만드는건데요..
글번호: 446
작성자: 고영태
작성일: 2007/03/09 오후 1:44:00
조회수: 3680
조금은 어려운 쿼리문이지만 이 쿼리문을 님의 것으로 만든다면 정말 좋은 예제 입니다.
물론 비 효율적이기는 하지만..
이 쿼리문은 가지고 계시다가 나중에라도 꼭 님의 것으로 만드시길..
그리고 게시판 쿼리문은 게시판 종류에 따라 바뀌기 때문에 찾아다니기보단
이해한다음에 거기에 맞는 쿼리문을 작성하시는게 좋습니다.
처음부터 잘하는 사람은 없으니 열심히 하셔서 대박나시길..

On 2007-03-09 오전 1:56:00, '서방원' wrote:
------------------------------------------------------------
>안녕하세요...제가 회사 수습으로 현재 교육을 받고 있는데 이번 과제였던 게시판 구현을위해 저장프로시저로 게시판 목록을 20개씩 나눠서 표현을 할수있게 만드는거였습니다.
>아쉽게도 혼자 구현을 못하고...(ㅡㅡ; 머리가 딸린지 계속 제자리 걸음만 3일간했음).
>결국....회사에서 참고하라고준 쿼리문을 보고 복사해 붙여넣기 방식으로 했습니다.
>한번보시고 이보다 좋은 방법이나 다른 구현 방법있으시면 좀 가르쳐주세요.... 많은 답변 부탁드립니다.ㅠㅠ 수습3개월을 버티긴 버티겠지만....조금이라도 내꺼로 만들어야겠다는 생각에 다른 방법도 알아보는데 쉽게 안나와서...
>
>
>--=======================================================================================
>-- 게시판 리스트
>--
>--=======================================================================================
>-- 사용자 함수 생성
>-- 해당 글의 댓글수
>CREATE function get_comment_count (@board varchar(50),@idx int)
>returns int
>as
>begin
>declare  @comment_count int, @board_comment varchar(20)    -- @comment_count 해당글의 댓글수 / @board_comment 게시판 테이블명
>begin
>    
>     if @board = 'free_board'
>    begin
>        select @comment_count=count(*) from free_board_comment where _parent_idx = @idx and active_state = 1
>    end
>    
>    --set @sql = 'set @board_comment = '+@board+'_comment'
>    --set @sql = @sql + 'select @comment_count=count(*) from '+@board_comment+' where idx = '+@idx
>    --execute(@sql)
>end
>return (@comment_count)
>end
>
>-- 저장 프로시저
>create proc lsw_free_board_list
>    @start_idx int =1,                -- 해당페이지에서 시작될 글 번호
>    @page_size int = 20,            -- 한페이지당 보여줄 글수
>    @search int = 0,                -- 조건문
>    @search_sdate varchar(10) = '',    -- 검색 날짜 부터~
>    @search_edate varchar(10) = '',    -- 검색 날짜 까지
>    @search_field varchar(20) = '',    -- 검색 조건
>    @search_txt varchar(100) = ''    -- 검색 단어
>AS
>set nocount on
>declare @sql varchar(5000)
>declare @length int
>set @length=50
>if (@start_idx is null) or (@start_idx < 1)
>begin
>    set @start_idx = 1
>end
>if (@page_size is null) or (@page_size <1)
>begin
>    SET @page_size =10
>end
>
>-- 검색문
>declare @search_str varchar(100)
>set @search_str = ''
>if    @search = 1
>    set @search_str = ' and Write_time >= '''+@search_sdate+''' and
>    write_time <= '''+convert(varchar, dateadd(d, 1, @search_edate), 23)+''''
>else if @search = 2
>    set @search_str = ' and '+@search_field+' like '+'''%'+@search_txt+'%'' '
>else if @search = 3
>    set @search_str = ' and write_time >= ' +@search_sdate+' and
>    wriite_time <= '''+convert(varchar, dateadd(d, 1, @search_edate), 23)+''' and
>    '+@search_field+' like '+'''%'+@search_txt+'%'' '
>
>-- 임시테이블 생성
>set @sql=
>    '
>    declare @start_idx int, @page_size int, @count int, @b_idx int
>    declare @boardtable table (
>    idx bigint not null,
>    id varchar(15) not null,
>    name varchar(20) not null,
>    aca_name varchar(30) null,
>    hit int null,
>    praise int null,
>    membertype int null,
>    write_time datetime null,
>    subject varchar (100) null,
>    contents text null,
>    fname varchar(100) null,
>    ftype varchar(30) null,
>    fencodename varchar(200) null,
>    active_state int not null
>)
>set transaction isolation level read uncommitted
>'
>
>-- 가져올 글 수에 대한 공간 확보
>set @sql = @sql + '
>    set @start_idx = ' + convert(varchar, @start_idx)+
>    '
>    set @page_size = ' + convert(varchar, @start_idx+@page_size) +
>    '
>    select @count = count(idx)
>    from free_board
>'
>-- 커서 생성 및 시작 포인트 잡기
>set @sql = @sql + '
>    declare board_cursor cursor local static read_only for
>    select top '+convert(varchar, @start_idx+@page_size)+' idx
>    from free_board
>    where active_state = 1'+@search_str+' order by idx desc'
>
>-- 커서 실행 게시판 데이터로부터 받은 값을 임시테이블로 삽입
>set @sql = @sql + '
>
>    if @count > 0
>    begin
>        
>        open board_cursor
>
>        fetch absolute @start_idx from  board_cursor
>        into @b_idx
>
>        while @@fetch_status = 0 and @start_idx < @page_size
>        begin
>            set @start_idx = @start_idx + 1
>            insert @boardtable
>            select
>                
>                idx,
>                id,
>                name,
>                aca_name,
>                hit,
>                praise,
>                membertype,
>                write_time,
>                subject,    
>                contents,
>                fname,
>                ftype,
>                fencodename,
>                active_state
>            
>                from free_board        
>        where active_state = 1
>        and idx= @b_idx
>        fetch next from board_cursor
>        into @b_idx
>    end
>    
>    close board_cursor
>end
>deallocate board_cursor
>
>    if @@error = 0
>    begin
>        select
>            
>            idx,
>            id,
>            name,
>            aca_name,
>            hit,
>            praise,
>            membertype,
>            write_time,
>            (case when len(subject) >'+ convert (varchar, @length) + ' then
>            left (subject, ' +convert(varchar, @length ) + ') + ''...''
>            else subject
>            end) as subject,
>            contents,
>            fname,
>            ftype,
>            fencodename,
>            active_state,
>            get_comment_count(''free_board'', idx) as comment_count
>        from @boardtable
>    end
>    '
>--print @sql
>exec (@sql)
>set nocount off
>go
>exec free_board_list
------------------------------------------------------------

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 쌤....이건 무슨 오류에요?? (1) - 조혜경 2007-03-09 6885
  게시판 저장프로시저(SP) 목록 페이징처리한거 만드는건데요.. (1) - 서방원 2007-03-09 5033
현재글 Re : 게시판 저장프로시저(SP) 목록 페이징처리한거 만드는건데요.. - 고영태 2007-03-09 3680
다음글 쌤...헬프 미~~~ - 조혜경 2007-03-08 3191
 
손님 사용자 Anonymous (손님)
로그인 Home