2012-07-17 4 views
3

MySQL의 CodeIgniter의 3 개 테이블 조인 -내가 내 데이터베이스에 3 개 테이블이

  1. tbl_roles (ROLE_ID, ROLE_NAME을);
  2. tbl_users (id, role_id, username, email, password);
  3. tbl_tickets_replies (ID, TICKET_ID 266 ROLE_ID, 코멘트)

role_id, id, id 해당 테이블의 기본 키입니다. 내가 필요합니다 : -

  1. 사용자 이름 tbl_users.
  2. role_name from tbl_roles. ticket_idtbl_tickets_replies = $ticket_id에서 매개 변수로 오는 tbl_tickets

에서

  • 의견.

    내 모델의 기능은 다음과 같습니다 -

    function fetch_comments($ticket_id){ 
         $this->db->select('tbl_tickets_replies.comments,tbl_users.username,tbl_roles.role_name'); 
         $this->db->where('tbl_tickets_replies.ticket_id',$ticket_id); 
         $this->db->from('tbl_tickets_replies'); 
         $this->db->join('tbl_users','tbl_users.id = tbl_tickets_replies.user_id'); 
         $this->db->join('tbl_roles','tbl_roles.role_id=tbl_tickets_replies.role_id'); 
         $comments = $this->db->get('tbl_tickets_replies'); 
         return $comments; 
        } 
    

    이 즉, 내가 잘못 쿼리를 보여주는 데이터베이스 오류를하고있는 중이 야한다. 는 내가이 오류가 표시되고 3 개 개의 다른 테이블

    에서 데이터를 가져 오기 위해 세 개의 테이블을 조인하는 방법을 물어보고 싶은 : -

    데이터베이스 오류가
    오류 번호 발생

    : 1066

    독특한되지 않음을 표/별칭 : 'tbl_tickets_replies'

    SELECT tbl_tickets_repliescomments, tbl_users. username, tbl_roles. role_name FROM (tbl_tickets_replies, tbl_tickets_replies) JOIN tbl_users ON tbl_users. id = tbl_tickets_replies. user_id JOIN tbl_roles ON tbl_roles. role_id = tbl_tickets_replies. role_id WHERE tbl_tickets_replies. ticket_id = '6'

    파일 이름 : C : \ WAMP \ www가 \ local.helpdesk.com 모닥불 \ \ CodeIgniter의 \ 데이터베이스 \ DB_driver.php

    줄 번호 : 복잡한 들어 330`

  • +1

    'from' 절을 제거하거나 $ this-> db-> get()에서 테이블을 제거하십시오. 둘 다 필요하지 않습니다. 어떤 오류가 발생합니까? –

    +0

    @Yan : 내 코드를 편집했습니다 – avinashse

    +0

    당신은'$ this-> db-> from'을 제거하지 않았거나 : $ this-> db-> get();' –

    답변

    6

    를 얻을. 시험해보기 :

    function fetch_comments($ticket_id){ 
        $this->db->select('tbl_tickets_replies.comments, 
          tbl_users.username,tbl_roles.role_name'); 
        $this->db->where('tbl_tickets_replies.ticket_id',$ticket_id); 
        $this->db->join('tbl_users','tbl_users.id = tbl_tickets_replies.user_id'); 
        $this->db->join('tbl_roles','tbl_roles.role_id=tbl_tickets_replies.role_id'); 
        return $this->db->get('tbl_tickets_replies'); 
    } 
    
    0

    쿼리, 나는 다음과 같이 일반 SQL을 사용하는 것을 선호합니다.

    $sql = "SELECT...."; 
    $q = $this->db->query($sql); 
    

    가, BTW DB-에서 테이블 이름을 제거하려고> 당신은 두 번 tbl_tickets_replies 언급하는 기능을

    $comments = $this->db->get(); //change this 
    
    +0

    활성 레코드 함수를 사용하면 쿼리를 간단하게 만들 수 있습니다 – avinashse

    +0

    쿼리를 dinamically 빌드해야한다면 원시 SQL은 어렵거나 불가능합니다. – uzsolt

    0

    조건부로 참여하십시오.

    $this->db->select('*'); $this->db->from('articles'); 
    $this->db->join('category', 'category.id = articles.id'); 
    $this->db->where(array('category.id' => 10)); $query = 
    $this->db->get(); 
    
    관련 문제