select 쿼리문 어떻게 생성하시나요?
글쓴이: kws4679 / 작성시간: 월, 2012/01/30 - 12:12오후
이런것을 다이나믹 쿼리라고 하나요 정확히 용어를 잘 모르겠지만
보통 게시판이나 검색에서 이런경우가 많던데요
예를들어 이름, 나이, 성별, 등으로 검색한다고하면
사용자가 각각 이름, 나이, 성별을 검색 조건을 하지 않았을때 부터시작해서 각 조건을 설정했을때
그리고 특히 나이같은경우는 어느 나이부터 어느나이까지를 검색해야 되고 이런 상황에서
체계적으로 쿼리를 작성하거나 프로그램을 구성하는 방법이 없을까요? 너무 중구난방식으로 if else 만 들어가는거같고
흐름도 보기 매우 안좋더군요....
거기다가 쿼리 자체가 뭔가 통일성이 있는게 아니라 예를들어 where 문이 처음나오면 그냥 쓰고 다음부터는 and, or 등으로 이렇게 나눠지니
또 preparedstatement 쓰면 ' 표시가 들어가서 어쩔수도 없고..
조건에 따른 쿼리 생성이 매우 힘든것 같습니다 보통 어떻게들 하시는지 알고싶습니다!!
Forums:
제가 쓰는 방식은..
우선 모든 where 조건을 가진 쿼리 문자열을 만들고 실제 비교 값을 바꾸는 방식을 씁니다.
mysql 환경에서 예를 들면,
이 방법이 가장 좋은 방법인지는 모르겠습니다.
더 좋은 방법을 아시는 분은 답글 부탁 드립니다.
위에 분과 다른 방식의 접근
위에 답글 다신분은 프로그램적으로 접근하신거 같아서
저는 DB 에서의 접근 방식으로 답변 달아 보겟습니다.
일단 Sql Injection 이나 기타 DB 에 대한 공격을 감안하신다면
Stored Procedure 와 같은 DB의 기능을 이용하는것이
제가 가진 Query 의 첫번째 규칙입니다.
그리고는 쿼리를 이렇게 짭니다.
$이름검색값 이렇게 쓴건 DB 마다 인자값 처리 규칙이 다르니 적당히 적은겁니다.
이렇게 하면 다소 쿼리가 길어질수 있지만
검색조건이 있을때와 없을때가 한번에 처리되는 좋기는 합니다.
그리고 1=1 이렇게 쓴건 글 쓰신분이 말씀하신대로
WHERE 문뒤에 처음 나오는 검색조건이냐에 따라서 AND, OR 이 붙기도 하고 안붙기도 하니까
일단 항상 참인 비교 구문을 적는거죠 별 뜻은 없습니다. ^^
항상 그렇지만 DB 를 잘하는 사람은 무조건 Query 로 해결하려고 하고
프로그램 잘 하는 사람은 무조건 프로그램으로 해결하려는 경향이 있죠 ㅋㅋ
일반적으로 웹사이트든, 검색 프로그램이든 WAS 가 바쁘지 DB 가 바쁜 경우는 드문것 같습니다.
그니까 위처럼 쿼리를 좀더 신중하게 짜고 DB 테이블 튜닝좀 해서
DB 에 부하를 적절히 분배해주는게 제가 가진 두번째 규칙입니다. ^^
------------------------------------------------------------
ProgrammingHolic
쿼리가 이상하게 나와서 다시 씁니다.
삭제가 안되네요 ㅠ.ㅠ
------------------------------------------------------------
ProgrammingHolic
댓글 달기