CI 묻고 답하기

제목 쿼리 결과를 못가져오는데 도와주세요
카테고리 일반
글쓴이 니로 작성시각 2017/08/08 17:54:43
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 417   RSS
		$orderby = ($this->input->post('orderby')) ? $this->input->post('orderby') : 'P.PUMNAME';

		$gubun1 = ($_SESSION["LOGIN_TYPE"] == 1) ? "3" : "2";
		$Where = " P.GUBUN1 != '$gubun1'  AND P.DISPLAYGUBUN  = 'O'";		

$select =" P.PUM_ID, P.PUMCODE,  P.PUMNAME,  P.PUMGYU,  P.DANWI1,  P.MAKERCODE_ID,  P.JAEGOLIMIT,  P.DANGAOUT1 DANGA,	"
		        ." M.MAKER,  T.IWTKSTK,  T.IWISSTK,  T.IWZSTK,  T.IWKDSTK,  T.IWLKSTK,  T.CPPRM,  P.TK_PUM_ID	";

		$from = "	  COD_PUM P, COD_PUMPIC I,  COD_MAKER M,	"
				."	       (  SELECT T.IWTKSTK, T.IWISSTK, T.IWZ5STK IWZSTK, T.IWKDSTK, T.IWLKSTK, P.PUM_ID,	"
				."	                 (CASE	"
				."	                     WHEN TO_CHAR (COUNT (P.CPPRM)) > 1	"
				."	                     THEN	"
				."	                        TO_CHAR (COUNT (P.CPPRM))	"
				."	                     ELSE	"
				."	                        MAX (P.CPPRM)	"
				."	                  END)	"
				."	                    CPPRM	"
				."	            FROM V_TK_PUM T,	"
				."	                 (SELECT PC.PUMCODE, PC.PUM_ID, PR.CPPRM	"
				."	                    FROM COD_PUMCOMP PC,	"//타사코드 테이블
				."	                         (SELECT DISTINCT I.CPPRM, I.CPKEY1	"
				."	                            FROM V_TK_PROMITEM I, V_TK_PROMCUS C, V_TK_PROM H	"
				."	                           WHERE     C.CPCPRM = I.CPPRM	"
				."	                                 AND I.CPPRM = H.CPHPRM	"
				."	                                 AND H.CPHTSTR <= SYSDATE	"
				."	                                 AND H.CPHTYP2 = 'Y'	"
				."	                                 AND ( (C.CPCCST = '1008'	"
				."	                                        AND (C.CPCTYP1 = 'C' OR C.CPCTYP1 = 'D'))	"
				."	                                      OR (C.CPCTYP1 = 'G' AND C.CPCRGN = 'TAE')) 	"
				."	                                 AND C.CPCID = 'PM') PR	"

				."	                   WHERE PC.PUMCODE = PR.CPKEY1(+)	"
				."	                         AND PC.COMP_ID IN (SELECT CODE	"
				."	                                              FROM COD_REMARK	"
				."	                                             WHERE GUBUN = 'SCM-GVORDT')) P	"
				."	           WHERE T.ICAT = P.PUMCODE	"
				."   		GROUP BY T.IWTKSTK, T.IWISSTK, T.IWZ5STK, T.IWKDSTK, T.IWLKSTK, P.PUM_ID) T	";

		$where_s="	  P.PUM_ID = I.PUM_ID(+)	"
				."	       AND P.MAKERCODE_ID = M.MAKER_ID(+)	"
				."	       AND P.PUM_ID = T.PUM_ID(+) ";


		$M->db->select($select);
		$M->db->from($from);
		$M->db->where($where_s);
		$M->db->where($Where);

		$M->db->order_by($orderby,'ASC');
		$M->db->order_by('P.PUMGYU','ASC');
		$M->db->limit($limit,$offset);
		$data = $M->db->get();

		if($data->num_rows()>0)
		{
			$data = $data->result_array();
		}
		else
		{
			$data = array();
		}

 

쿼리 소스부분입니다.

 

/* Formatted on 2017-08-08 오후 5:53:34 (QP5 v5.163.1008.3004) */
SELECT *
  FROM (SELECT inner_query.*, ROWNUM rnum
          FROM (  SELECT P.PUM_ID,
                         P.PUMCODE,
                         P.PUMNAME,
                         P.PUMGYU,
                         P.DANWI1,
                         P.MAKERCODE_ID,
                         P.JAEGOLIMIT,
                         P.DANGAOUT1 DANGA,
                         M.MAKER,
                         T.IWTKSTK,
                         T.IWISSTK,
                         T.IWZSTK,
                         T.IWKDSTK,
                         T.IWLKSTK,
                         T.CPPRM,
                         P.TK_PUM_ID
                    FROM COD_PUM P,
                         COD_PUMPIC I,
                         COD_MAKER M,
                         (  SELECT T.IWTKSTK,
                                   T.IWISSTK,
                                   T.IWZ5STK IWZSTK,
                                   T.IWKDSTK,
                                   T.IWLKSTK,
                                   P.PUM_ID,
                                   (CASE
                                       WHEN TO_CHAR (COUNT (P.CPPRM)) > 1
                                       THEN
                                          TO_CHAR (COUNT (P.CPPRM))
                                       ELSE
                                          MAX (P.CPPRM)
                                    END)
                                      CPPRM
                              FROM V_TK_PUM T,
                                   (SELECT PC.PUMCODE, PC.PUM_ID, PR.CPPRM
                                      FROM COD_PUMCOMP PC,
                                           (SELECT DISTINCT I.CPPRM, I.CPKEY1
                                              FROM V_TK_PROMITEM I,
                                                   V_TK_PROMCUS C,
                                                   V_TK_PROM H
                                             WHERE     C.CPCPRM = I.CPPRM
                                                   AND I.CPPRM = H.CPHPRM
                                                   AND H.CPHTSTR <= SYSDATE
                                                   AND H.CPHTYP2 = 'Y'
                                                   AND ( (C.CPCCST = '1008'
                                                          AND (C.CPCTYP1 = 'C'
                                                               OR C.CPCTYP1 = 'D'))
                                                        OR (C.CPCTYP1 = 'G'
                                                            AND C.CPCRGN = 'TAE'))
                                                   AND C.CPCID = 'PM') PR
                                     WHERE PC.PUMCODE = PR.CPKEY1(+)
                                           AND PC.COMP_ID IN
                                                  (SELECT CODE
                                                     FROM COD_REMARK
                                                    WHERE GUBUN = 'SCM-GVORDT')) P
                             WHERE T.ICAT = P.PUMCODE
                          GROUP BY T.IWTKSTK,
                                   T.IWISSTK,
                                   T.IWZ5STK,
                                   T.IWKDSTK,
                                   T.IWLKSTK,
                                   P.PUM_ID) T
                   WHERE     P.PUM_ID = I.PUM_ID(+)
                         AND P.MAKERCODE_ID = M.MAKER_ID(+)
                         AND P.PUM_ID = T.PUM_ID(+)
                         AND P.GUBUN1 != '2'
                         AND P.DISPLAYGUBUN = 'O'
                ORDER BY PUMNAME ASC, P.PUMGYU ASC) inner_query
         WHERE ROWNUM < 30)

생성된 쿼리이구요..

 

 

 Fatal error: Call to a member function num_rows() on a non-object in /home2/mobile/application/controllers/code.php on line 511

 

이렇게 에러가 납니다.

 

여기저기 찾아보니 쿼리 에러라고 하는데 도무지 알수가 없습니다..

로컬에서 같은 db로 접속해서 실행하면 이상이 없는데 리눅스 서버상에 소스업로드후 같은 db로 접속하면 에러가 발생합니다

도와주십시오 ㅠㅠ

 

쿼리만 복사해서 실행해보면 이상없이 돌아가거든요..

 다음글 mysql 트랜젝션 질문입니다. (7)
 이전글 전역변수 생성하는 방법이 있을까요? (1)

댓글

kaido / 2017/08/09 09:48:30 / 추천 0

액티브 레코드를 사용했었군요 ;;;;

이제 보았습니다 ㅎㅎ

 

액티브 레코드 메뉴얼 확인해 보시면 사용 방법이 전혀 다릅니다.

소스코드 확인해 보시면 각 항목마다 틱을 감아주는 것부터 시작해서 자율적으로 이것저것 처리하는 부분이 있어, 메뉴얼 대로만 사용이 가능합니다.

 

그래서 보통 복잡한 서브쿼리는 액티브레코드를 사용하지 않습니다.

 

$query = "SELECT *
  FROM (SELECT inner_query.*, ROWNUM rnum
          FROM (  SELECT P.PUM_ID,
                         P.PUMCODE,
                         P.PUMNAME,
                         P.PUMGYU,
                         P.DANWI1,
                         P.MAKERCODE_ID,
                         P.JAEGOLIMIT,
                         P.DANGAOUT1 DANGA,
                         M.MAKER,
                         T.IWTKSTK,
                         T.IWISSTK,
                         T.IWZSTK,
                         T.IWKDSTK,
                         T.IWLKSTK,
                         T.CPPRM,
                         P.TK_PUM_ID
                    FROM COD_PUM P,
                         COD_PUMPIC I,
                         COD_MAKER M,
                         (  SELECT T.IWTKSTK,
                                   T.IWISSTK,
                                   T.IWZ5STK IWZSTK,
                                   T.IWKDSTK,
                                   T.IWLKSTK,
                                   P.PUM_ID,
                                   (CASE
                                       WHEN TO_CHAR (COUNT (P.CPPRM)) > 1
                                       THEN
                                          TO_CHAR (COUNT (P.CPPRM))
                                       ELSE
                                          MAX (P.CPPRM)
                                    END)
                                      CPPRM
                              FROM V_TK_PUM T,
                                   (SELECT PC.PUMCODE, PC.PUM_ID, PR.CPPRM
                                      FROM COD_PUMCOMP PC,
                                           (SELECT DISTINCT I.CPPRM, I.CPKEY1
                                              FROM V_TK_PROMITEM I,
                                                   V_TK_PROMCUS C,
                                                   V_TK_PROM H
                                             WHERE     C.CPCPRM = I.CPPRM
                                                   AND I.CPPRM = H.CPHPRM
                                                   AND H.CPHTSTR <= SYSDATE
                                                   AND H.CPHTYP2 = 'Y'
                                                   AND ( (C.CPCCST = '1008'
                                                          AND (C.CPCTYP1 = 'C'
                                                               OR C.CPCTYP1 = 'D'))
                                                        OR (C.CPCTYP1 = 'G'
                                                            AND C.CPCRGN = 'TAE'))
                                                   AND C.CPCID = 'PM') PR
                                     WHERE PC.PUMCODE = PR.CPKEY1(+)
                                           AND PC.COMP_ID IN
                                                  (SELECT CODE
                                                     FROM COD_REMARK
                                                    WHERE GUBUN = 'SCM-GVORDT')) P
                             WHERE T.ICAT = P.PUMCODE
                          GROUP BY T.IWTKSTK,
                                   T.IWISSTK,
                                   T.IWZ5STK,
                                   T.IWKDSTK,
                                   T.IWLKSTK,
                                   P.PUM_ID) T
                   WHERE     P.PUM_ID = I.PUM_ID(+)
                         AND P.MAKERCODE_ID = M.MAKER_ID(+)
                         AND P.PUM_ID = T.PUM_ID(+)
                         AND P.GUBUN1 != '2'
                         AND P.DISPLAYGUBUN = 'O'
                ORDER BY PUMNAME ASC, P.PUMGYU ASC) inner_query
         WHERE ROWNUM < 30)";

$sql = $this->db->query($query);

echo $sql->num_rows();

 

니로 / 2017/08/09 09:58:59 / 추천 0

kaido//

근데 그게 로컬일아 서버단에서 돌리는게 다를수가 있나요..?

니로 / 2017/08/09 10:00:10 / 추천 0
kaido// 작성해주신것도 제가 테스트를 해봣는데 에러가 나더라구요.. 오라클 프로그램에서 실행하면 잘 되는데
kaido / 2017/08/09 10:17:32 / 추천 0

@니로

당연하게도 다를 수가 없습니다.

다르다면 분명 서버 설정이 다른 부분이 있을것입니다.

 

로컬에서 되는데 서버에서 안된다는 문제는 잘 체크해보라는 조언 말고는 해드릴수 있는게 없습니다.

 

컬럼명을 대소문자 허용으로 로컬에서 만들다 실섭에서는 대문자 허용안함 때문에 진땀빼면서 변환했던것은 기억 납니다.

오라클 사용 하신다니 이런 이유는 아닐테구요.

쿼리를 통째로 넣어도 안된다고 하시니, 쿼리문제가 아니라 다른 문제인것 같습니다.

니로 / 2017/08/09 10:18:36 / 추천 0

@kaido 

도무지 답을 모르겠네요.. 

 

에러가 나길래 쿼리를 복사해서 직접 실행해보니 잘되는데 왜이런건지.. 참..ㅠㅠ

kaido / 2017/08/09 10:23:45 / 추천 0

PHP가 oci8을 지원 안하고 있을 가능성도 있습니다. 서버쪽 php 확인해보세요.

니로 / 2017/08/09 10:31:50 / 추천 0

 

 

왼쪽이 서버쪽 $this->db, 오른쪽이 로컬의 $this->db인데요

다른부분을 캡쳐 했는데..

이정보로는 알수 있는것이 어떤게 있을까요?

 

서버쪽 php가 oci8을 지원안한다면.. 다른 검색들도 에러가 나야 할텐데 쟤만 저러고있으니..ㅠㅠ

니로 / 2017/08/09 15:02:33 / 추천 0
휴 해결했습니다 SYSDATE 조건이 문제....OTL..