2012-07-09 110 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']'被設置爲什麼?他們現在做了什麼? – 2012-07-09 03:18:13

+0

當然,基本上。假設用戶購買了3個獨立的程序,並且對於每個程序,他或她已經使用了它一定次數,這個數字將被記錄爲來自其他人的ID。例如,Bob購買了產品1,產品2和產品3.我需要知道Bob購買的「程序」以及與其產品或類型相對應的其他ID是否已記錄在其他產品或類型中。這有任何意義嗎? – user1011713 2012-07-09 03:21:31

+0

對不起,讓我們試試更好的例子:鮑勃購買了3種不同的鍛鍊:棒球,籃球和足球鍛鍊。對於每個人都已經完成了一定數量的鍛鍊,這些鍛鍊將被記錄並使用第二個sql查詢返回的num-rows。我需要這項運動(籃球,足球,棒球......)以及鮑勃爲每項運動所做的鍛鍊次數(計數ID)。 – user1011713 2012-07-09 03:23:26

回答

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 2012-07-09 03:45:36

+0

不幸的是我無法讓它工作。我收到錯誤,'爲foreach()提供的無效參數'。有什麼建議麼? – user1011713 2012-07-09 06:16:43

+0

對不起,我忘了從模型函數中返回$ data: -/fixed。 – 2012-07-09 06:25:20