2012-07-09 3 views
0

방금 ​​Codeigniter로 시작했는데 이것이 나를 미치게합니다. 사용자가 프로그램을 구입했는지 여부를 결정하는 쿼리가 있습니다. 그런 다음 해당 프로그램의 유형 범주를 실행하여 다른 테이블에 쿼리를 기록한 횟수를 결정해야합니다. 혼란을 가져 주어서 죄송합니다.codeigniter를 사용한 다중/서브 쿼리

두 모델을 내 컨트롤러에서보기로 두 배열을 반환하는 데 문제가 있습니다.

function specificPrograms() { 
$specific_sql = $this->db->query("SELECT program,created FROM `assessment` WHERE uid = $this->uid"); 
if($specific_sql->num_rows() > 0) { 
foreach ($specific_sql->result() as $specific) {   
$data[] = $specific; 
$this->type = $specific->program; 
} 
return $data; 
} 

$sub_sql = $this->db->query("SELECT id FROM othertable WHERE user_id_fk = $this->uid and type = '$this->type'"); 
if($sub_sql->num_rows() > 0) { 
foreach ($sub_sql->result() as $otherp) {  
$data[] = $otherp; 
} 
return $data; 
} 

} 

그럼 내 컨트롤러에서 내가 가진

, 어떤 도움

$data['specific'] = $this->user_model->specificPrograms(); 
$data['otherp'] = $this->user_model->specificPrograms(); 

감사합니다.

+0

코드에 대한 기대치를 더 설명 할 수 있습니까? 이것이 실행 된 후에'$ data [ 'specific']'과'$ data [ 'otherp']'가 무엇을 기대합니까? 지금 그들은 무엇으로 설정되어 있습니까? –

+0

물론, 기본적으로. 사용자가 3 개의 별도 프로그램을 구입하고 각 프로그램에 대해 특정 횟수만큼이 프로그램을 사용한 경우이 번호는 othertable의 ID로 기록됩니다. 예를 들어, Bob은 제품 1, 제품 2 및 제품 3을 구입했습니다. Bob이 구입 한 '프로그램'과 제품 또는 유형에 해당하는 타사 테이블에 기록 된 ID의 수를 알아야합니다. 그게 말이 되니? – user1011713

+0

죄송합니다. 더 나은 예를 들어 봅시다. Bob은 야구, 농구, 축구 운동 등 3 가지 운동을 구입했습니다. 각각에 대해 기록 된 두 번째 SQL 쿼리에서 반환 된 num-rows를 사용하여 특정 수의 운동을 수행했습니다. 나는 스포츠 (농구, 축구, 야구 ...)와 밥이 각 스포츠 (카운트 아이디)를 위해 한 운동 수와 함께 필요합니다. – user1011713

답변

1

위의 의견을 바탕으로 필요한 결과를 반환하는 하나의 쿼리를 제안합니다. 결과 집합은 다음과 같습니다.

+----------+------------+------+ 
| program | created | uses | 
+----------+------------+------+ 
| football | 2001-01-01 | 12 | 
+----------+------------+------+ 
| baseball | 2007-01-01 | 21 | 
+----------+------------+------+ 


SELECT 
    assessment.program, 
    assessment.created, 
    count(othertable.user_id) as uses 
FROM assessment 
JOIN othertable 
    ON othertable.user_id_fk = assessment.uid 
    AND othertable.type = assessment.program 
WHERE assessment.uid = $this->uid 
GROUP BY assessment.program 

... model ... 

function specificPrograms() { 
    $results = $this->db->query($sql_from_above); 
    if($specific_sql->num_rows() > 0) { 
    foreach ($specific_sql->result() as $program_data) {   
    $data[] = $program_data; 
    } 
    return $data; 
} 

... meanwhile in controller ... 


$programs_used = $this->user_model->specificPrograms(); 
foreach($programs_used as $program_use_data) { 
    // On first iteration, this is true: 
    // $program_use_data['program'] == "football" 
    // $program_use_date['uses'] == 12 
} 
+0

현재 이것을 시도한다. – user1011713

+0

불행히도 나는 그것을 작동시킬 수 없습니다. foreach()에 잘못된 인수가 제공되었습니다. '라는 오류가 나타납니다. 어떤 제안? – user1011713

+0

죄송합니다. 모델 함수에서 $ data를 반환하는 것을 잊었습니다. -/fixed. –