이 두 쿼리문을 합치는 방법은 없을까요? > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

이 두 쿼리문을 합치는 방법은 없을까요? 정보

이 두 쿼리문을 합치는 방법은 없을까요?

본문

for ($i=0; $i<$bo_cnt; $i++) {

   if ($stx){
   $sql = " select distinct wr_parent from g4_write_".rtrim($tmp_bo_table[$i])." $sql_search_where order by wr_id desc limit 0, 6 ";
   } else {
   $sql = " select wr_parent, wr_id, wr_subject, wr_content, wr_datetime, ca_name from g4_write_".rtrim($tmp_bo_table[$i])." where wr_is_comment = 0 $sql_search_and order by wr_id desc limit 0, 6 ";
   }

   $result = sql_query($sql);

   for ($m=0; $row = sql_fetch_array($result); $m++) { 
      if ($stx){
      $row = sql_fetch(" select wr_parent, wr_id, wr_subject, wr_content, wr_datetime, ca_name from g4_write_".rtrim($tmp_bo_table[$i])." where wr_id = '$row[wr_parent]' ");
      }
   }

}

와 같은 코드가 있습니다.

보시다시피 쿼리문 하나가 어쩔수 없이 for 문에 종속되었는데, 저러면 속도도 많이 저하되고

비효율적인 줄 압니다.

그래서 위의

if ($stx){
$sql = " select distinct wr_parent from g4_write_".rtrim($tmp_bo_table[$i])." $sql_search_where order by wr_id desc limit 0, 6 ";
}

부분과

if ($stx){
$row = sql_fetch(" select wr_parent, wr_id, wr_subject, wr_content, wr_datetime, ca_name from g4_write_".rtrim($tmp_bo_table[$i])." where wr_id = '$row[wr_parent]' ");
}

부분을 for문 밖에서, 즉 for문 전에 합치고 싶은데, 어떻게 하면 되나요?

공통된 칼럼이 wr_parent 이니까 합친후 그 결과의 필드값들을 한번에 배열로 가져오게 하면 될것 같은데...

도움 부탁드립니다.


감사합니다.

댓글 전체

원하시는 결과물을 잘 몰라서 맞는진 모르겠지만..

select * from
(select distinct wr_parent from g4_write_".rtrim($tmp_bo_table[$i])." $sql_search_where order by wr_id desc limit 0, 6) a
left outer join
g4_write_".rtrim($tmp_bo_table[$i])." b
on a.wr_parent = b.wr_id

이런식으로 한줄로 맞습니까?;;
열병님 답변 정말 감사합니다. ambiguous wr_parent 라고 나오는데,

select * 에서 wr_parent 을 b.wr_parent 으로 해야되나요?

아참 그리고 마지막으로 제안하신 위 조인방식이 원래처럼 쿼리를 for문 안에서 룹하는거보다 빠를까요?

다시한번 감사드립니다.
select b.wr_parent, b.wr_id, b.wr_subject, b.wr_content, b.wr_datetime, b.ca_name from
(select distinct wr_parent from g4_write_notice $sql_search_where order by wr_id desc limit 0, 6) a
left outer join
g4_write_notice b
on a.wr_parent = b.wr_id

네~ a테이블과 b테이블 둘다 wr_parent이 존재하여 ambiguous라고 뜨는 것이구요..
b테이블의 자료가 목적이므로 b.이렇게 위와같이 지정을 하셔야 합니다~
그리고 언어반복문에서 쿼리를 던지는거보다는 구조적으로 빠릅니다..
현재의 쿼리로 보면 limit가 6이라서 차이는 거의 없을 듯하지만
저의 경험으로 수십 수백개 이상의 for안에서 쿼리를 던질 경우.. 그리고 데이터가 점점 많아질 경우 굉장히 서버에 부하가 많이 가고 느립니다.
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT