'낱말잇기 퍼즐'을 직접 만들 수 있고, 목록(list)에서 만들어진 퍼즐을 골라 풀어 볼 수 있는 게시판을 만들어 보자!
★ 게시판을 위한 DB를 구성
테이블은 퍼즐의 정보를 담고있는 한 개의 테이블만으로 충분하다.
-- WordPuzzle 테이블
create table WordPuzzle
(
idx int PRIMARY KEY,
widthQuestion nvarchar(2000),
lenghtQuestion nvarchar(2000),
regDate smalldatetime default(getdate()),
answer nvarchar(160)
)
idx - 퍼즐의 글번호('목록'에서 '글보기'로 페이지가 이동 할 때, 어떤 글이 클릭됐는지 알기위해 같이 넘겨 줘야한다.)
widthQuestion - 가로문제
lenghtQuestion - 세로문제
regDate - 작성일(글의 작성일을 나타내며, 목록의 제목으로도 사용된다.)
answer - 정답(정답은 배열[0]~[χ]까지의 값을 나타낸다.)
퍼즐의 크기는 최소 5×5 ~ 9×9이기 때문에 answer의 크기는 81(9×9)칸을 고려하여 넉넉하게 160으로 지정했다.
-- Insert 프로시져
실행방법: SP_WordPuzzle_Insert '1.가로문제위치,'2.세로문제위치,'망,,,,,,둥,,,,,이,,오,,,치,,,,,,발,,,,,전,,,~~..'
create proc SP_WordPuzzle_Insert
(
@widthQuestion nvarchar(2000),
@lenghtQuestion nvarchar(2000),
@answer nvarchar(160)
)
as
begin
insert into WordPuzzle(idx,widthQuestion,lenghtQuestion,answer)
values (doubleo.FUNC_WordPuzzle(),@widthQuestion,@lenghtQuestion,@answer)
end
widthQuestion, lenghtQuestion, answer은 프로시져를 호출 할 때 넘어오는 값을 사용하기 때문에 변수로 선언했고,
글번호 idx는 프로시져 안에서 자동증가 함수를 호출하여 사용하기 때문에 별도로 변수를 선언하지 않았다.
프로시져를 호출 할 때 사용되는 변수는 프로시져명(@변수명 자료형(크기))식으로 선언하며
그 외에 프로시져 안에서 사용 할 변수는 begin안에 declare @변수명 자료형(크기)식으로 선언한다.
-- View 프로시져
실행방법: SP_WordPuzzle_View 1
create proc SP_WordPuzzle_View(@idx int) as begin select idx,widthQuestion,lenghtQuestion,answer, replace(convert(char(16),regDate,120),'-','.')as regDate, cast(datepart(yy,regDate) as char(4))+'년' + cast(datepart(MM,regDate) as char(2))+'월' + cast(datepart(dd,regDate) as char(2))+'일 낱말퀴즈' as title from WordPuzzle where idx = @idx end |
프로시져를 호출 할 때 넘어오는 글번호(@idx)로 해당 글보기가 가능하다.
등록일을 '2011.02.10 10:42'로 출력하기 위하여
convert(char(16),regDate,120) - 시분초까지 나오는 스타일 120으로 지정, 분까지 출력하기 위하여 char(16)로 크기지정.
replace(convert한 날짜시간, '-','.') - convert한 날짜시간에서 '-'를 ','으로 바꿔주기 위해 사용.
제목은 '2011년2월10일 낱말퀴즈'로 출력하기 위하여
datepart(yy,regDate) - regDate의 연도만 출력.
datepart(MM,regDate) - regDate의 월만 출력.
datepart(dd,regDate) - regDate의 일만 출력.
cast( A as 자료형) - A의 자료형 변환.
-- List 프로시져
실행방법: SP_WordPuzzle_List
create proc SP_WordPuzzle_List as begin select idx, replace(convert(char(16),regDate,120),'-','.')as regDate, cast(datepart(yy,regDate) as char(4))+'년' + cast(datepart(MM,regDate) as char(2))+'월' + cast(datepart(dd,regDate) as char(2))+'일 낱말퀴즈' as title from WordPuzzle order by idx desc end |
최근에 작성한 순서대로(글번호가 클수록 최근) 정렬하도록 order by idx desc 사용.