FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[2764] Re:Re:Re:group by
civilian [civilian] 3000 읽음    2008-03-27 17:36
게시물을 입력할 때 태그1,태그2,태그3,태그4 이렇게 입력햇다면

파싱해서 여러 레코드로 나누어 넣는 부분은 더 필요하겠지만

태그를 한 레코드에 한개씩만 기록하고

해당 필드를 인덱스로 잡고

select distinct 를 사용하면 속도가 빨라질 것도 같은데요 ?

게시물번호   제목
1                  ㄱㄱㄱㄱㄱㄱㄱㄱㄱㄱ
2                  ㄴㄴㄴㄴㄴㄴ
3                  ㄷㄷㄷㄷㄷㄷㄷㄷㄷㄷ

일련번호  게시물번호 태그
1             1                가족
2             1                여행
3             2                여행
4             2                제주도
5             3                친구
6             3                여행
7             3                제주도

select distinct a.* from board as a, tags as b
where a.sn = b.sn and (b.tag = '여행' or b.tag = '제주도')

이런 식으로...

한 필드에 태그를 여러개 등록한다 하더라도

태그 필드를 select 에 포함하지 않으면 select distinct로 중복행을 걸러낼 수 있을걸로 보입니다.

현쓰 님이 쓰신 글 :
: 제로보드에 Firebird 핸들러 추가 중입니다.
: 저 쿼리는 게시물을 태그로 검색하는 쿼리이고요.
: 검색 키워드에 의해서 한개의 게시물이 여러개로 select 될 가능성이 있어서
: group by를 이용해 여러개로 검색된 게시물을 하나로 만들어 주려는 목적인것 같습니다.
: 제가봐도 그리 좋은 쿼리같지는 않습니다.
:
: 이 쿼리를 고치려면 제로보드 개발자들과 상의를 해봐야 해서 어떻게 해야 효율적인가 생각 중입니다.
:
: 예를들면
:
: 게시물번호      태그
: 1                     태그1,태그2,태그3
: 2                     태그1
: 3                     태그2
:
: 이렇게 데이터가 있을때 "태그"라는 단어로 검색을 하게 되면
:
: 1                     태그1,태그2,태그3
: 1                     태그1,태그2,태그3
: 1                     태그1,태그2,태그3
: 2                     태그1
: 3                     태그2
:
: 이렇게 select 되게끔 돼있습니다.
: 이것을 게시물번호로 group by 해서 중복된 것을 제거 하는 역할로 사용합니다.
:
: civilian 님이 쓰신 글 :
: : GROUP BY 함수를 쓰면서 select 절에 그 많은 필드가 왜 필요한가요?
: :
: : group by는 계산함수에 의해 처리된 값을 group화 합니다.
: :
: : 쿼리에서 얻으려는 결과가 무엇인가요?
: :
: : 그리고 documents와 tags 테이블간의 join에 대한 어떤 조건도 보이지 않는데
: :
: : 이것도 좀 이상하고....
: :
: : 현쓰 님이 쓰신 글 :
: : : 아래 쿼리가 동작되게 하려면 어떻게 해야 할까요?
: : : select 할 필드가 "documents".* 이라 group by 시 문제가 되는것 같습니다.
: : : group by에 필드를 모두 적어주면 동작을 하겠지만...
: : : 필드가 53개인데 다 적어서 해봤는데... 오류메세지도 안나오고 결과물도 안나옵니다.
: : : 이런 경우 어떻게 처리 하나요?
: : :
: : : SELECT FIRST 20 SKIP 0
: : :     "documents".*
: : : FROM
: : :     "xe_documents" as "documents",
: : :     "xe_tags" as "tags"
: : : Where
: : :     ("documents"."module_srl" in (58) and
: : :     "documents"."document_srl" = "tags"."document_srl"
: : :     and "tags"."tag" like '%%') and
: : :     "documents"."list_order" < 2100000000
: : : GROUP BY
: : :     "documents"."document_srl"
: : : ORDER BY "documents"."list_order" asc
: : :
: : : 위 쿼리 실행시 오류 메세지
: : : SQL error code = -104.
: : : Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

+ -

관련 글 리스트
2761 group by 현쓰 2645 2008/03/27
2762     Re:group by civilian 3462 2008/03/27
2763         Re:Re:group by 현쓰 2417 2008/03/27
2764             Re:Re:Re:group by civilian 3000 2008/03/27
2765                 Re:Re:Re:Re:group by 현쓰 3184 2008/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.