2014. 6. 16. 11:01


그누보드는 게시판의 글과 댓글이 하나의 테이블로 되어있습니다. 

게시판에 따라, 따로 테이블로 되어 참조키를 이용하여 불러오는 경우도 있습니다만, 그누보드는 하나의 테이블로 되어있는데, 이는 제목과 내용을 검색하는데 용이한 장점이 있겠습니다. 

그리고 참고로 게시판의 테이블은 그누보드경우 게시판마다 각각의 테이블이 존재합니다. 생성은 관리자에서 게시판 생성시 테이블이 만들어지며, 그 테블명은 config.php 에서 정의된 $g4[write_prefix] 와 생성시 입력한 아이디값 bo_table 값으로 이어져 생성됩니다. 

XE 경우 여러개의 게시판이라도 하나의 테이블로 되어있습니다. 속도가 느리지 않겠냐는 우려에 XE 개발자경우 mysql의 힘을 믿는다는 글귀를 본적있는 듯합니다. 가능한 이야기일겁니다. 

각각 테이블의 게시판과 하나로 된 테이블의 게시판과의 장단점은 분명 있습니다. 

하나로 된 테이블 구조에서 통합적으로 게시글을 불러들일 경우 별 어려움 없이 가능합니다. 

반면 그누보드처럼 게시판수에 따라 테이블이 있다면 이때 통합적으로 게시글을 불러올려면 union 을 써야 하고, 이때 불러들일 field 값을 일일이 줘야 합니다. 이유는, 게시판에 생성되어있는 필드들의 순서값이 다를 수 있어 서로 다른 결과값을 가져올수 있습니다. 만약, 다른 방법이 있다면 알려주시면 감사하겠습니다. 

그누보드 게시판 테이블을 이야기하기전에 위와 같이 언급한데에는 다른 형태의 게시판이 있고 그 차이가 어떤지 아주 간략히라도 이해하는데 도움이 되고자함입니다. 

그누보드에서 일반 게시글인가, 댓글인가 구분을 해주는데 필드명은 wr_is_comment 입니다. 

그럼 게시글만 출력하게되는 목록과 관련된 부분을 한번 보겠습니다. 

bbs/list.php 내 포함된 부분입니다 

1if ($sca || $stx)
2{
3    $sql " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
4}
5else
6{
7    $sql " select * from $write_table where wr_is_comment = 0 $sql_order limit $from_record, $board[bo_page_rows] ";
8}
9$result = sql_query($sql);



$sca : 카테고리, $stx : 검색단어 로 검색시 댓글까지 검색을 한다는 것이 보입니다. 그 조건이 아니면? 게시글만 가져온다는 내용입니다. 


그렇다면, 게시글에 대한 댓글은 어떤 연결고리로 불러들일지 궁금해지겠지요. 

wr_parent 입니다. 

댓글들이 가지는 부모의 wr_id 값을 가지는 놈입니다. 

댓글을 예를들기 위해 이제 글내용보기시 로 넘어가면 위 쿼리문에서 본문글을 가져왔으니, 그 아래 댓글을 가져오는 쿼리문이 있을겁니다. 

bbs/view_comment.php 부분입니다. 

1$sql " select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 order by wr_comment, wr_comment_reply ";


'' 카테고리의 다른 글

트위터 부트스트랩 다운로드  (0) 2014.06.16
DISQUS 소셜 댓글 달기  (1) 2014.06.16
남은 글자수 체크  (1) 2012.07.23
Trigger an Error - 오류 발생시키기  (0) 2012.05.19
jQuery Mobile 페이지 이동  (1) 2011.11.03
Posted by 다오나무
iOS2012. 6. 20. 19:07

일반적인 경우라면 iOS에서 기본적으로 제공하는 Cell Type을 통해 구현이 가능하지만, 특별히 사용자가 디자인한데로 cell을 만들어 사용하는 방법도 있다. Interface Builder를 통해 cell xib를 만들어 customize 한 cell을 만들어 보자.

1. 프로젝트를 생성하고 "UITableViewCell" 을 상속받은 Objective-C 클래스를 생성한다.



2. Custom Cell을 꾸밀 xib파일을 생성한다.(일반적으로 objective-c 클래스 파일 이름과 xib이름을 동일하게 - CustomCell이라고 - 만든다)

3. xib파일을 열어 우측 하단의 library에서 "Table View Cell"을 끌어다 놓는다. 끌어다 놓은 Table View Cell을 선택하고"Identity Inspector" 창에서 Custom Class를 위에서 만든 Objective-c Class인 "CustomCell"로 지정한다.

 4. xib에 구성하고 싶은 UI들을 올려놓고 "CustomCell class"에서 IBOutlet을 이용하여 UI component들과 연결을 한다.
 
5. TableView를 사용하기 위한 기본설정을 한다. 기본적인 내용은 여기에서 확인하면 된다.

6. ViewController.h에 TableView에 넣을 NSArray형태의 데이터를 @property로 선언하고 @synthesize로 선언한다.
 //ViewController.h
@property (retainNSMutableArray *products;
//ViewController.m
@synthesize products; 
 
 
7. 테이블에 들어갈 내용이 상품정보임으로 상품정보를 가지고 있을 Objective-C클래스(domain object)를 만든다.(이름은 Product라는 이름으로 만든다.)
 
 
8. CustomCell에 Product를 넘기면 Product의 property값을 CustomCell에 set해주는 method를 만들어 준다.

9. TableView 사용시 구현해야할 delegate method들을 구현한다.
 

 [실행 결과]

Posted by 다오나무
영삼이의 IT정보2012. 5. 18. 13:26

INNER JOIN : simple join이라고도 하며, 둘 이상의 테이블에서 join condition을 만족하는 행만 반환한다.

즉, 둘 이상의 테이블에 전부 존재하는 데이터만 조회한다는 것이다. (물론 ON조건에 만족하는 데이터)

집합으로 표현하자면 교집합이라 이해하면 된다.

간단한 예는 http://isstory83.tistory.com/entry/조인Join-쿼리

 

OUTER JOIN : OUTER JOIN 에는 LEFT , RIGHT, FULL OUTER JOIN 등의 세가지 형식이 있다.

INNER JOIN과 는 달리 두 테이블에서 지정된 쪽의 (LEFT or RIGHT) 모든 결과를 모두 보여준 후 반대쪽에 매칭되는 값을 보여주고, 값이 없어도 NULL로 보여주는 JOIN이다.

JOIN 이전에 나오는 테이블이 왼쪽(LEFT)테이블이 되고, JOIN 이후에 나오는 테이블은 오른쪽(RIGHT)테이블이 된다.

 

OUTER JOIN의 종류 및 사용

LEFT OUTER JOIN - A라는 테이블과 B라는 테이블이 있다면 그 두 테이블 중 왼쪽 테이블을 기준을 세우는 JOIN

SELECT t1.컬럼1, t1.컬럼2, t2.컬럼4, t2.컬럼5  FROM 테이블1 t1 LEFT JOIN 테이블2 t2 ON (t1.컬럼1 = t2.컬럼6)

왼쪽 TABLE1을 기준으로 컬럼1과 컬럼6를 매칭하여 결과 값을 보여주되 컬럼6에 3이 매칭되는 값이 없기에 NULL을 보여준다.

 

RIGHT OUTER JOIN - A라는 테이블과 B라는 테이블이 있다면 그 두 테이블 중 오른쪽 테이블을 기준을 세우는 JOIN

SELECT t1.컬럼1, t1.컬럼2, t2.컬럼4, t2.컬럼5 FROM 테이블1 t1 RIGHT JOIN 테이블2 t2 ON (t1.컬럼1 = t2.컬럼6)

테이블2의 컬럼6의 값 4에 해당하는 컬럼1이 없으므로 해당 데이터를 NULL로 보여준다.


FULL OUTER JOIN - 간단하게 LEFT와 RIGHT OUTER JOIN의 합이라고 생각하면 된다.

SELECT t1.컬럼1, t1.컬럼2, t2.컬럼4, t2.컬럼5 FROM 테이블1 t1 FULL OUTER JOIN 테이블2 t2 ON (t1.컬럼1 = t2.컬럼6)

 

참고적으로, 같은 두 개의 테이블을 INNER JOIN하면 아래와 같은 결과를 보여준다.

SELECT t1.컬럼1, t1.컬럼2, t2.컬럼4, t2.컬럼5 FROM 테이블1 t1 INNER JOIN 테이블2 t2 ON (t1.컬럼1 = t2.컬럼6)

위의 FULL OUTER JOIN에서 양쪽에 NULL이 들어간 데이터들이 사라진 것을 확인 할 수 있다.

Posted by 다오나무
영삼이의 IT정보2011. 10. 28. 05:09

SQL을 이용해서 데이터베이스를 생성할 때
데이터베이스를 생성하는 명령어는

CREATE DATABASE 데이터베이스이름

이와같이 테이블을 생성하는 명령어는

CREATE TABLE 테이블이름(칼럼1이름 설명, 칼럼2이름  설명, 칼럼3이름 설명 ...)

SQL은 대소문자를 구분하지 않지만, SQL 키워드를 대문자로 사용하면, DB 테이블과 칼럼의 이름을 구분하기 쉬움)
예) sitename 이라는 DB를 생성하고, users 테이블을 생성하자.

이때 실제로 'sitename'이라는 데이터베이스가 생성되었는지 확인해보도록 하겠다.
일반적인 경로인
C:\APM_SETUP\Server\MYSQL5\Data 에 가보면

sitename 이라는 데이터베이스가 생성된 것을 볼 수 있다.
다음단계로, 'sitename'이라는 데이터베이스 안에 
필드가 user_id, first_name, last_name, email, pass, registration_date 을 가진 테이블 'users'를 생성해보겠다.

이제, 만든 'users'테이블의 내용을 보기 위해서
먼저, sitename DB 안에 생성한 테이블이 무엇이 있는지 확인해보자.

SHOW TABLES;

'sitename' 데이터베이스 안에는 users'라는 테이블이 있음이 확인되었다.
이제, users 테이블을 확인해보자.
SHOW COLUMNS FROM users;

(뒷부분이 약간 잘리긴 했지만)
위와 같이 users 테이블이 확인되었다.
이제 'users' 테이블에 레코드를 입력해 보자.
-> 입력할 칼럼의 이름을 명기하는 방식의 쿼리를 이용한다.
INSERT INTO users
->(first_name, last_name, email, pass, registration_date)
VALUES('Larry', 'Ullman',
->'email@example.com',
->SHA1('mypass'), NOW());

이와같이 데이터를 입력했다.
이제 데이터를 검색하는방법은
SELECT * FROM 테이블이름

SQL의 기본은 여기까지.
헝 뭔가 포스팅을 밀린느낌.ㅠ.ㅠ

Posted by 다오나무
영삼이의 IT정보2011. 10. 19. 10:25


Posted by 다오나무