CI 묻고 답하기

제목 액티브레코드 쿼리 문 개체를 저장하거나 쿼리문장을 받아올수 있는지 궁금합니다.
글쓴이 봉남이 작성시각 2010/03/13 00:36:30
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 28484   RSS
안녕하세요~


코드 이그나이터 액티브레코드, 상당히 편리하네요 ㅎㅎ
보안적인면 걱정도 덜어주고, 사용법도 간단하구요.
특히, 가변적인 조건의 쿼리문장을 만들땐.. 뭐.. 반복문에 ->like, ->where 이 중복되니 이건뭐 아주좋습니다ㅋㅋ


다음 코드는 도움말에 있는 쿼리문장입니다.
 
 
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
 
$query = $this->db->get();
 
// 생성결과: 
// SELECT * FROM blogs
// JOIN comments ON comments.id = blogs.id
 
 
1. 여기서, 
"SELECT * FROM blogs JOIN comments ON comments.id = blogs.id"
이것. 코드이그나이터가 각종 조건을 조합하여 작성한 쿼리문장을 알아내는 함수나 방법이 있는지 궁금합니다.
 
 
2. 또한
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get(); //이상태에서"ㄱ부분"
// 아래 문장을 실행후
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get();
을 한다면 $this->db 는 새로운 결과셋 개체를 갖게되는데,
"ㄱ부분"의(당시의) 쿼리개체를 다른 변수에 담아 보존하여 이후 문구에서 쓸 수 있는지 궁금합니다.
$this->db->start_cache(); // 액티브레코드 캐싱을하면 이전의 이전의쿼리셋에 누적하여 쿼리문이 작성되는것 같았습니다..
 
 
3.
$query->num_rows() 를 통해 레코드의 개수를 알아오고
$query->result() 를 해보면 조회된 결과를 뽑아낼 수 있는데,
만약 $query->result() 를 하지 않는경우..
DB에 쿼리되는문장이 궁금합니다..
딱. $query->num_rows() == count(*)   인것인지
아니면, select *, count(*)    이 의미인지 말이죵..
페이징을 하려면 1.전체 자료양을 구하고, 2. 그중 일부의 자료로 범위를 제한해야하는데
$query->num_rows() 이과정에서 아싸리 select *  까지하면 쫌 거시기다 싶은데 말이죠 ㅎ
$query->result() 이 요청될때 비로소 select 컬럼을 하는것인지요..?
 
 
 
초면에 -_ㅡ 약간은 불손한듯 많은것을 여쭙네요 -.,-
앞으론 종종 답글도 달도록 하겠습니다 ㅎㅎ
 
읽어주셔서 고맙습니다.. 꾸벅
 
 
 다음글 페이지네이션 질문 좀 드립니다. (2)
 이전글 uploadify 쓰시는분들 'script' 부분에 /... (9)

댓글

사월 / 2010/03/13 04:51:47 / 추천 0
1. 프로파일링을 켜면 확인가능합니다.
http://www.codeigniter-kr.org/user_guide/general/profiling.html

2. get()을 날리면 기존 셋팅이 지워지게되고, 말씀하신 start_cache()를 쓰면 유지가 됩니다.

3. mysql인 경우 mysql_num_rows()를 사용합니다. mysql_result.php 파일에 정의돼있구요.

그럼.. (_ _ )
봉남이 / 2010/03/13 09:12:08 / 추천 0
사월님의 가르침 감사합니다.. ^^;
태양이 / 2010/03/13 17:57:26 / 추천 0
1. http://codeigniter-kr.org/user_guide/database/helpers.html

$this->db->last_query();

마지막으로 사용한 쿼리 문자열을 리턴합니다(쿼리 실행결과가 아닙니다). 예:

$str = $this->db->last_query();

// Produces: SELECT * FROM sometable....
봉남이 / 2010/03/14 17:40:55 / 추천 0
우왓.. 태양이님 정답 고맙습니다 ^^//

2번.. 쿼리개체를 $qo = new $this->db() 머시기 이래서 저장할 수 없는게 쫌 아쉽긴하네용 ㅎ;