미치겠네요.. 질문할 곳이 여기 밖에 없어요... > 자유게시판

자유게시판

미치겠네요.. 질문할 곳이 여기 밖에 없어요... 정보

미치겠네요.. 질문할 곳이 여기 밖에 없어요...

본문

$que_count="SELECT(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput  $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='수술완료')cnt_1,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1 ".$que_type." and a.state='수술예정')cnt_2,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='수술취소')cnt_3,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='내원상담')cnt_4,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='내원예약')cnt_5,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type."and a.state='내원취소')cnt_6,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='진행중')cnt_7,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1  ".$que_type." and a.state='재컨택')cnt_8,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and state='보류')cnt_9,";

/*$que_count=$que_count."(SELECT COUNT(*) FROM corp_call WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput ".$que_type." and state='부재중')cnt_10,";*/

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='부재중1')cnt_10_1,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='부재중2')cnt_10_2,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='부재중3')cnt_10_3,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1 ".$que_type." and a.state='부재중4_종료')cnt_10_4,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1 ".$que_type." and (a.state=' ' or a.state=''))cnt_11_1,";

$que_count=$que_count."(SELECT COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1".$que_type." and a.state='종료')cnt_11";

$que_count = $que_count." FROM corp_call";
//echo $que_count."<br>";

$result_count = mysql_query($que_count);
$row_count = mysql_fetch_array($result_count);

$cnt_1 = $row_count[cnt_1];
$cnt_2 = $row_count[cnt_2];
$cnt_3 = $row_count[cnt_3];
$cnt_4 = $row_count[cnt_4];
$cnt_5 = $row_count[cnt_5];
$cnt_6 = $row_count[cnt_6];
$cnt_7 = $row_count[cnt_7];
$cnt_8 = $row_count[cnt_8];
$cnt_9 = $row_count[cnt_9];

$cnt_10_1 = $row_count[cnt_10_1];
$cnt_10_2 = $row_count[cnt_10_2];
$cnt_10_3 = $row_count[cnt_10_3];
$cnt_10_4 = $row_count[cnt_10_4];

$cnt_11 = $row_count[cnt_11];
$cnt_11_1 = $row_count[cnt_11_1];

$cnt_oknum = $cnt_1+$cnt_2+$cnt_3+$cnt_4+$cnt_5+$cnt_6+$cnt_7+$cnt_8+$cnt_9+$cnt_10_1+$cnt_10_2+$cnt_10_3;
$cnt_nonum = $cnt_10_4 +$cnt_11+$cnt_11_1;

$cnt_total = $cnt_1+$cnt_2+$cnt_3+$cnt_4+$cnt_5+$cnt_6+$cnt_7+$cnt_8+$cnt_9 + $cnt_10_1 + $cnt_10_2 + $cnt_10_3 + $cnt_10_4 +$cnt_11+$cnt_11_1;


이거를 전에 개발자가 짜 놓은 거 같은데....
 속도가 너무 느립니다.

corp_call 에는 5만개의 데이타
corp_call_comment 에는 15,000개의 데이타

두개의 데이타를 각각 합계를 내는 데요...

속도가 거의 2분 가까이 소요 됩니다...

이걸....

      $que_count=" select 
      a.com_id,
      sum(case when a.state in ('수술완료','수술예정','수술취소','내원상담','내원예약','내원취소','진행중','재컨택','보류','부재중1','부재중2','부재중3','부재중4_종료','종료','철회',' ','') then 1 else 0 end ) as 'totalDB',
      SUM(CASE WHEN a.state = '수술완료' THEN 1 ELSE 0 END) AS 'endstamenDB',
      SUM(CASE WHEN a.state = '수술예정' THEN 1 ELSE 0 END) AS 'prestamenDB',
      SUM(CASE WHEN a.state = '수술취소' THEN 1 ELSE 0 END) AS 'cancelstamenDB',
      SUM(CASE WHEN a.state = '내원상담' THEN 1 ELSE 0 END) AS 'consultingDB',
      SUM(CASE WHEN a.state = '내원예약' THEN 1 ELSE 0 END) AS 'reservDB',
      SUM(CASE WHEN a.state = '내원취소' THEN 1 ELSE 0 END) AS 'reservCancelDB',
      SUM(CASE WHEN a.state = '진행중' THEN 1 ELSE 0 END) AS 'processDB',
      SUM(CASE WHEN a.state = '재컨택' THEN 1 ELSE 0 END) AS 'recontactDB',
      SUM(CASE WHEN a.state = '보류' THEN 1 ELSE 0 END) AS 'suspendDB',
      SUM(CASE WHEN a.state in ('부재중1','부재중2','부재중3') THEN 1 ELSE 0 END) AS 'AbsenceDB',
      SUM(CASE WHEN a.state = '부재중1' THEN 1 ELSE 0 END) AS 'AbsenceDB1',
      SUM(CASE WHEN a.state = '부재중2' THEN 1 ELSE 0 END) AS 'AbsenceDB2',
      SUM(CASE WHEN a.state = '부재중3' THEN 1 ELSE 0 END) AS 'AbsenceDB3',
      SUM(CASE WHEN a.state = '부재중4_종료' THEN 1 ELSE 0 END) AS 'AbsenceDB4',
      SUM(CASE WHEN a.state = '철회' THEN 1 ELSE 0 END) AS 'cancelDB',
      SUM(CASE WHEN a.state in ('종료') THEN 1 ELSE 0 END) AS 'endDB',
      sum(case when a.state in ('수술완료','수술예정','수술취소','내원상담','내원예약','내원취소','진행중','재컨택','보류','부재중1','부재중2','부재중3') then 1 else 0 end ) as 'usualDB',
      sum(case when a.state in ('부재중4_종료','종료',' ','') then 1 else 0 end ) as 'unusualDB',
      SUM(CASE WHEN a.state in (' ','') THEN 1 ELSE 0 END) AS 'nostatus'
      FROM corp_call a left outer join (select * from corp_call_comment group by rq_no) b
      on b.rq_no = a.no
      where $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput $strsecondinput $strfirstinput_1 $strsecondinput_1 ".$que_type."
      And a.com_id='$corp_id'
      ";

      $result_count = mysql_query($que_count);
      $row_count = mysql_fetch_array($result_count);


이렇게 바꾸려니.... 속도는 빠른데.... 위의 값이랑 다르게 나오는게 문제네요...

물론, 어느게 더 정확한 데이타 인지는.... 모른다는 것도 문제구요...

제발 도와 주세요 ㅠ.ㅜ

추천
0

댓글 4개

잘은 모르겠지만, group by 로 하면 되지 않을까요?

SELECT a.state, COUNT(DISTINCT b.rq_no) FROM corp_call a left join corp_call_comment b on  b.rq_no = a.no WHERE $strwhere $where1 $where3 $where4 $where7 $where8 $strfirstinput  $strsecondinput $strfirstinput_1  $strsecondinput_1 $que_type GROUP BY a.state

일단 count 값을 얻은 후, 조건별 합계는 php에서 하고요..
구분별로 총합 테이블 만드신다음에 Cron 으로 1~2 시간에 한번씩 돌리시거나
보는 페이지에서 통계보기 버튼 만들어서 보여 주시는 방법이 제일 낳은것 같습니다.

튜닝을 하게 되면 배보다 배꼽이 더 커지니까요
그렇게 까지 할 정도는 아니지만, 일단 방법을 알려 주셔서 감사합니다.
하지만, 서버 생 초보이기에..... 힘들 듯 하네요... 에휴...
전체 196,490 |RSS
자유게시판 내용 검색

회원로그인

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