제목 | 액티브레코드는 서브쿼리가 어렵다해서 그냥 풀어서 썻는데 오류가 왜 나는지 모르겠습니다. | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | 코린이 | 작성시각 | 2018/03/05 11:08:28 |
|
|||
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 에 넣어서 테스트해보시고, 그걸 나중에 액티브레코드화 하는 연습 하시면 익숙해 지실것 입니다. |