개발 Q&A

제목 액티브레코드는 서브쿼리가 어렵다해서 그냥 풀어서 썻는데 오류가 왜 나는지 모르겠습니다.
카테고리 PHP
글쓴이 코린이 작성시각 2018/03/05 11:08:28
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 13843   RSS
function lists($kind='', $offset='', $limit='', $pname='', $region='') {
        $sqlLimit = ' limit ' . $limit . ', ' . $offset;
        $sql = 'SELECT a.pid, region, supply, pname, gubun, a.regdate, count(b.aid) as cnt
FROM product_tourapp a left outer join (
	select pid, aid, count(aid)
    from apply_tourapp
    group by aid) as b on (a.pid = b.pid)
group by a.pid desc'. $sqlLimit;
        $this->db->query($sql);
		//$query=$this->db->get('product_tourapp',$limit,$offset);
        
		if ($kind == 'num_rows') {
            $result=$query->num_rows();
        } else {
            $result=$query->result();
        }
        return $result;
    }

위 코드를 시키면 

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6

SELECT a.pid, region, supply, pname, gubun, a.regdate, count(b.aid) as cnt FROM product_tourapp a left outer join ( select pid, aid, count(aid) from apply_tourapp group by aid) as b on (a.pid = b.pid) group by a.pid desc limit ,

이런식으로 에러가 발생합니다. limit 변수 쪽 값 입력하는게 문제같은데 이렇게해도 안되고 저렇게해도 안되네요.

고수님들 알려주세요 부탁드립니다.

 다음글 CI와 mysql을통해 채팅기능질문입니다. (4)
 이전글 PHP로 만든 프로그램을 판매할 경우 궁금합니다. (1)

댓글

빛그림 / 2018/03/05 11:10:55 / 추천 0
$limt로 아무런 값이 전달되지 않은듯 보여집니다만...
코린이 / 2018/03/05 11:49:08 / 추천 0

그런데 이게 밑에 주석처리된 get을 이용하면 페이징이 잘 되거든요. 근데 기능 추가할게 생겨서

하다보니 쿼리가 복잡해져서 액티브 레코드 쓰던걸 그냥 풀어썼습니다. limit만 안쓰면 잘되는데 limit의 저 변수값을

숫자로 입력하면 잘되는데 변수값으로 주니까 작동을 안합니다. 따옴표가 문제인건지... 그래서 저런식으로 풀어쓴 쿼리가

제 코드에 있길래 붙여썼는데 안됩니다.

한대승(불의회상) / 2018/03/05 13:15:09 / 추천 0
echo $sql; 해보시면 뭐가 문제인지 바로 나올것 같은데요.
변종원(웅파) / 2018/03/05 15:59:27 / 추천 0
limit 10, 0(또는 null) 일 경우 액티브레코드는 limit 10으로 변환해주는데 일반 쿼리는 없으면 그냥 비워두니 문제가 됩니다.
kaido / 2018/03/05 17:26:01 / 추천 0

액티브레코드가 서브쿼리가 조금 생각 할게 있긴 합니다만, 왠만한건 다 표현이 가능 합니다.

$this->db->select(' * ', false);

이렇게 2번째 인자에 false를 넣으면 왠만한건 다 들어갑니다.

where 

절에 넣고 싶으시면 

$this->db->where( ' id = 1 ', false, false);

3번째절에 false넣으시면 됩니다.

 

아직 이해가 어렵다면 일단 쿼리실행기에 쿼리 그대로 실행해서 성공이면 그대로 CI   에 넣어서 테스트해보시고, 그걸 나중에 액티브레코드화 하는 연습 하시면 익숙해 지실것 입니다.