2012-08-04 3 views
1

cakePHP에 두 개의 테이블이 있습니다. WHERE ID NOT IN두 개의 선택 쿼리를 중첩하는 CakePHP

사람하십시오 (competence_ratings FROM competence_id을 WHERE employee_id입니다 = $ userId를 선택)

SELECT * 역량 FROM :

competencies 
------------ 
id 
name 

competenceRatings 
----------------- 
id 
competence_id 
user_id 
rating 

나는 케이크의 방법으로 다음과 같은 쿼리를 작성하는 방법이 필요합니다 도와주세요!!

것은 나는이 하위 쿼리 방법에 가기 전에 무슨 짓을 :

나는 competencies-> hasMany-> competenceRatings, competenceRatings-> belongsTo-> 역량의 관계를 시도했다.

$competencies = $this->Competence->CompetenceRating->find('all',array('CompetenceRating.user_id' => $userId,'CompetenceRating.competence_id !=' => 'Competence.id')); 

사용자가 competenceRatings 테이블에 등급을 지정하지 않은 역량의 이름을 가져오고 싶습니다. 즉, comptenceRatings 테이블 (주어진 user_id에 대한)에 항목이없는 competencies 테이블의 이름 목록이 필요합니다. :

$subqueryOptions = array('fields' => array('competence_id'), 'conditions' => array('employee_id'=>$user_id)); 
$subquery = $this->Competence->CompetenceRating->subquery('all', $subqueryOptions); 

$res = $this->Competence->CompetenceRating->find('all', array(
    'conditions' => array('id NOT IN '. $subquery) 
)); 

가 하위 쿼리의 소스가 여기에 있습니다 : 당신은 아마 하위 쿼리()를 사용 할 것

$options['joins'] = array(
      array(
       'table' => 'competence_ratings', 
       'alias' => 'CompetenceRating', 
       'type' => 'LEFT OUTER', 
       'conditions' => array(
        'Competence.id = CompetenceRating.competence_id' 
       ) 
      ) 
     ); 
$options['conditions'] = array('CompetenceRating.employee_id' => $employee['Employee']['id']); 

$competencies = $this->Competence->find('all',$options); 
+0

지금까지 시도한 것은 무엇입니까? – mark

+0

실제 코드에 대해 이야기하고있었습니다. 예상 된 결과를 게시하는 대신 지금까지 코딩 한 내용을 게시해야합니다. 위의 질문을 편집하고 완료 할 수 있습니다. – mark

+0

다시 한번 같은 질문을하십시오. 2 또는 3 시간이 걸립니다. "cakePHP 테이블 두 테이블 합류"질문이 있습니다. –

답변

2

:

편집

나는 테이블도 가입 시도 https://github.com/dereuromark/tools/blob/2.0/Lib/MyModel.php#L405 이것을 AppModel.php에 넣어야합니다.

하지만 서브 쿼리가 필요하지 않다고 생각합니다. 당신은 아마 그것의 하나 쉽게 쿼리를 만들 수 있습니다

$this->Competence->CompetenceRating->find('all', array(
    'group' => 'competence_id', 
    'conditions' => array('NOT' => 'employee_id'=>$user_id)), 
    'contain' => array('Competence') 
)); 

당신이 -1로 재귀 설정이있는 경우 "포함"을 통해 능력을 포함하는 것을 잊지 말아.

+0

감사합니다. 나는 하나의 쿼리에서 그것을하고 싶다.하지만 나는 그렇게 할 수 없다. 어떻게해야할까요? 제 편집을 들으시겠습니까? – Ivin

+0

두 번째 방법을 시도했습니다. 이는 'CompetenceRating'''''''''CompetenceRating''''''''''''''''''''''''''''''''''''''''''''''''''CompetenceRating'''''remarks'''''CompetenceRating'''' 등이있다. ('user_id' ='28 ') GROUP BY competence_id – Ivin

+0

나는 competence_id를 원했고, competence_id는'competence_id '가 아닌'competence_ratings '이었습니다. 테이블 필드! – Ivin

관련 문제