CI 묻고 답하기

제목 액티브 레코드 사용시 백틱(`) 문자열이 사라집니다.
글쓴이 에카 작성시각 2013/09/16 22:50:10
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 14593   RSS
   $query = $this->db->SELECT('`V2-tag`.`tag_name`, COUNT(`V2-tag_index`.`tag_id`)')
         ->FROM('`V2-tag_index`')
         ->JOIN('`V2-tag`', '`V2-tag_index`.`tag_id` = `V2-tag`.`tag_id`')
         ->WHERE('`V2-tag_index`.`controllername`', 'imageboard')
         ->WHERE('`V2-tag_index`.`boardid`', $boardid)
         ->GROUP_BY('`V2-tag_index`.`tag_id`')
         ->ORDER_BY('COUNT(`V2-tag_index`.`tag_id`)', 'DESC', true)
         ->LIMIT(30, 0)
         ->GET();
이렇게 짰다면,
제가 원하는 SQL은
SELECT  `V2-tag`.`tag_name` , COUNT(  `V2-tag_index`.`tag_id` ) 
FROM  `V2-tag_index` 
JOIN  `V2-tag` ON  `V2-tag_index`.`tag_id` =  `V2-tag`.`tag_id` 
WHERE  `V2-tag_index`.`controllername` =  'imageboard'
AND  `V2-tag_index`.`boardid` =  'imageboard'
GROUP BY  `V2-tag_index`.`tag_id` 
ORDER BY COUNT(  `V2-tag_index`.`tag_id` ) DESC 
LIMIT 30
이건데,
SELECT `V2-tag`.`tag_name`, COUNT(`V2-tag_index`.`tag_id`)
FROM `V2-tag_index`
JOIN `V2-tag` ON V2-tag_index`.`tag_id` = `V2-tag`.`tag_id`
WHERE `V2-tag_index`.`controllername` =  'imageboard'
AND `V2-tag_index`.`boardid` =  'imageboard'
GROUP BY `V2-tag_index`.`tag_id`
ORDER BY COUNT(`V2-tag_index`.`tag_id`) DESC
LIMIT 30
이렇게 나옵니다. 잘보시면 JOIN문의 ON 뒤에 V2-tag_index 테이블을 가르키는 앞에 ` 문자열이 사라져있죠.

방법이 없을까요? 테이블 이름 바꾸는거 말구요 --;

데이터베이스 드라이버는 PDO드라이버 사용하고, DB는 MySQL(MariaDB)사용중입니다.
 다음글 view 이미지를 만들려고 하는 과정에 다시 질문 드립... (3)
 이전글 조금 황당한 ajax..... (3)

댓글

변종원(웅파) / 2013/09/16 23:00:37 / 추천 0
join문의 세번째 파라미터인 true는 왜 쓰시거죠?

매뉴얼 다시 보시길.. 거기는 left, right 등등 join 방식 쓰는 곳입니다.

세번째 파라미터 지우고 작업했는데도 그렇다면 sql문으로 작성하시는 방법과
버그리포팅을 하는 방법이 있을 것 같네요.
에카 / 2013/09/16 23:01:58 / 추천 0
 웅파님 // 제가 하도 답답해서 active record 관련해서 쿼리뜯다가 넣은거에요 --;
구조도 모르고 뜯다가 낭패만 봤습니다 --ㅋ
letsgolee / 2013/09/16 23:05:52 / 추천 0
 system/database/DB_active_rec.php 파일의 다음을 찾아보세요. 331라인정도에 있습니다.

  if (preg_match('/([\w\.]+)([\W\s]+)(.+)/', $cond, $match))
  {
   $match[1] = $this->_protect_identifiers($match[1]);
   $match[3] = $this->_protect_identifiers($match[3]);

   $cond = $match[1].$match[2].$match[3];
  }
그리고 거기서 preg_match 안에 있는 첫번째 괄호에 보면 [\w\.]이렇게 되어 있죠? 거기에 `을 추가해보세요. 그럼 [\w\.`]이렇게 될 겁니다. 그리고 테스트를 ...
에카 / 2013/09/16 23:07:07 / 추천 0
letsgolee님 감사합니다. 제 묵은 체증이 한번에 씻어내려가는 느낌입니다 ㅠㅠ
바로 한방에 해결되었네요
변종원(웅파) / 2013/09/16 23:10:02 / 추천 0
 order_by도 작업하셨나봐요?

AR이 100% 완벽하지 않습니다. 

전 조금 복잡해지는 쿼리는 sql문으로 작성하여 사용합니다.
에카 / 2013/09/16 23:16:08 / 추천 0
엇 order_by는 안건드렸는데 왜들어가있는지 모르겠네요 --; 코딩하면서 자꾸 깜빡깜빡 하나봐요. ㅠㅠ
웅파님 말씀대로 앞으로 복잡한 쿼리는 SQL문으로 작성해야겠네요. 감사합니다!
들국화 / 2013/09/17 09:52:21 / 추천 0
AR 을 전혀 안쓰는 1인..... ^^