2011-01-14 3 views
1

codeigniter CXTags 태그 라이브러리를 사용하는 응용 프로그램이 있습니다. 다음과 같이PHP : 활성 레코드 테이블 조인

데이터베이스 구조는 다음과 같습니다

게시물

ID

이 ROW_ID tags_ref

테이블

을 tag_id

태그

ID

safe_tag

태그

$의 safe_tag 다음 post.id = tags_ref.row_id에 tags_ref 가입 null가 아닌 경우, 내 쿼리는 기본적으로 간다 , tags_ref.tag_id = tags.id에 태그를 결합하십시오. 여기서 tags_ref.table = 'posts'및 tags.safe_tag = 'food'

SELECT * FROM posts 
JOIN tags_ref ON posts.id = tags_ref.row_id 
JOIN tags ON tags_ref.tag_id = tags.id 
WHERE tags.safe_tag = $safe_id 

아쉽게도 활성 레코드에 작성한 쿼리가 제대로 작동하지 않습니다. £ safe_tag이 null 일 때 쿼리가 완벽하게 작동하지만 잘못된 결과를 얻지 못할 때 쿼리가 제대로 작동합니다.

SELECT * 
FROM (`posts`) 
INNER JOIN `tags_ref` ON `posts`.`id` = `tags_ref`.`row_id` 
INNER JOIN `tags` ON `tags_ref`.`tag_id` = `tags`.`id` 
WHERE `tags_ref`.`table` = 'posts' 
AND `tags`.`safe_tag` = 'food' 
AND `posts`.`city_id` = '2' 

누군가가 모습을 가질 수 있습니다 : 여기

function get_posts($id = NULL, $safe_tag = NULL) { 

    if($safe_tag != NULL){ 
     echo $safe_tag;//debugging 
     $table = 'posts'; 
     $this->db->join('tags_ref', 'posts.id = tags_ref.row_id'); 
     $this->db->join('tags', 'tags_ref.tag_id = tags.id'); 
     $this->db->where('tags_ref.table', $table); 
     $this->db->where('tags.safe_tag',$safe_tag); 
    } 

    //if an id was supplied 
    if ($id != NULL) { 
     $this->db->where('posts.city_id',$id); 
    } 

    // execute query 
    $query = $this->db->get('posts'); 
    ... 

은에 프로파일 링 쿼리입니까? 나는 그것에 눈의 신선한 세트가 필요하다고 생각.

+0

«불행하게도 내가 활성 기록에 작성한 쿼리가 제대로 fuctioning되지»내부 쿼리를 실행하는 것을 잊었다 - 오류 또는 예기치 않은 데이터 집합을 반환? 실행하기 전에 $ this-> db로 SQL 쿼리를 문자열로 볼 수 있습니까? –

+0

CI Active Record 클래스는 매우 제한적이며 업데이트 및 삽입에만 사용됩니다. 그것 이외에는 $ db-> query ("SELECT * FROM table WHERE id =?", array ($ id))를 사용하십시오. 코드에서 추가 조인 절을 수행하는 것처럼 보이지만 활성 레코드 쿼리를 구문 분석하기 위해 서버에 추가로드가 발생하지 않는 것처럼 손상되지 않아야합니다. 죄송합니다.이 질문에 정말로 답변하지 않는다는 것을 알고, 단지 내 생각을 나누고 싶었습니다. – Naatan

+0

그런데 프로파일 링을 켜서 실행 된 쿼리를 볼 수 있습니다 (http://codeigniter.com/user_guide/general/profiling.html). – Naatan

답변

1

귀하 실제로 첫 번째 if{}

if($safe_tag != NULL){ 
     echo $safe_tag;//debugging 
     $table = 'posts'; 
     $this->db->join('tags_ref', 'posts.id = tags_ref.row_id'); 
     $this->db->join('tags', 'tags_ref.tag_id = tags.id'); 
     $this->db->where('tags_ref.table', $table); 
     $this->db->where('tags.safe_tag',$safe_tag); 
     $this->db->get(); // here 
    } 
관련 문제