2014-12-07 59 views
0

我是php和codeigniter的新手。基本上我希望項目表中的所有項目都與該項目的用戶一起顯示。**單個項目中可能有多個用戶,或者用戶尚未分配給該項目。**所以我嘗試過實施它,但是我沒有得到所需的輸出。請幫幫我 !!下面是代碼:codeigniter顯示所有項目及其上的用戶(無論是否有用戶)

型號:

public function get_projects() 
{ 
    $sql = "SELECT * FROM `project`"; 
    $query = $this->db->query($sql); 
    return $query->result(); 

} 

public function list_projects() 
{ 

    $project_result = $this->get_projects(); 
    $sql = "select user_fname , project_id , user_id from user"; 
    $query = $this->db->query($sql); 
    $user_result = $query->result(); 

    $result_arr = array(); 
    $proj_id_arr = array(); 

    foreach($project_result as $curr_proj): 

     if(in_array($curr_proj->project_id, $proj_id_arr)){ 
      $result_arr[$curr_proj->project_name][] = array( 
               'project_id ' => $curr_proj->project_id, 
               'project_name' => $curr_proj->project_name 
               ); 

     }else{ 

      $result_arr[$curr_proj->project_name][] = array( 
               'project_id ' => $curr_proj->project_id, 
               'project_name' => $curr_proj->project_name 
               ); 
     } 

     foreach($user_result as $curr_user): 
      if($curr_user->project_id == $curr_proj->project_id): 

       $result_arr[$curr_proj->project_name][] = array(
                  'project_id ' => $curr_proj->project_id, 
                  'project_name' => $curr_proj->project_name, 
                  'user'   => $curr_user->user_fname, 
                  'user_id'  => $curr_user->user_id 
                  ); 
       $proj_id_arr[] = $curr_proj->project_id; 
      endif; 


     endforeach; 

    endforeach; 

    echo '<pre>'; 
    print_r($result_arr);exit; 

    return $data; 
} 

控制器:

function index() { 

    $this->check_session(); 
    $data['main_content'] = 'admin/project/list'; 
    $data['lists']=$this->project_model->list_projects(); 
    $data['projects']=$this->project_model->get_projects(); 
    $data['result'] = false; 
    $this->load->view('common/admin_template', $data); 
    } 

這是我的代碼的結果:

Array 
(
[project 1 ] => Array 
    (
     [0] => Array 
      (
       [project_id ] => 1 
       [project_name] => project 1 
      ) 

     [1] => Array 
      (
       [project_id ] => 1 
       [project_name] => project 1 
       [user] => user1 
       [user_id] => 1 
      ) 

     [2] => Array 
      (
       [project_id ] => 1 
       [project_name] => project 1 
       [user] => user2 
       [user_id] => 2 
      ) 

    ) 

[project 2] => Array 
    (
     [0] => Array 
      (
       [project_id ] => 19 
       [project_name] => project 2 
      ) 

     [1] => Array 
      (
       [project_id ] => 19 
       [project_name] => project 2 
       [user] => user3 
       [user_id] => 3 
      ) 

    ) 

[project 3] => Array 
    (
     [0] => Array 
      (
       [project_id ] => 20 
       [project_name] => project 3 
      ) 

    ) 

[project 4] => Array 
    (
     [0] => Array 
      (
       [project_id ] => 21 
       [project_name] => project 4 
      ) 

    ) 

) 

有兩個表:一個是項目其中包含project_id,project_description和其他是user_id,user_fname,project_id(外鍵)的用戶

+0

我們可以看看你的實體關係圖,或所涉及的表的簡要說明,編輯成你的問題?我認爲一個項目可以有幾個用戶,但一個用戶只能有一個項目? – halfer 2014-12-07 18:06:31

+0

使用左連接或右連接 – Vinie 2014-12-08 04:22:19

回答

0

首先你使用循環內循環。這不是一個好習慣。使用此 如果您只想獲得至少有一個用戶的項目。比設置$ showOnlyHaveUser = true。 `

public function list_projects() 
{ 

$showOnlyHaveUser = FALSE; 

$project_result = $this->get_projects(); 
$sql = "select user_fname , project_id , user_id from user"; 
$query = $this->db->query($sql); 
$user_result = $query->result(); 
$result_arr = array(); 
$proj_id_arr = array(); 

$projects = array(); 

foreach ($project_result as $project) : 
    $projects[$project->project_id] = $project; 
    if($showOnlyHaveUser==FALSE) 
     $result_arr[$project->project_name] = array(); 
endforeach; 

foreach ($user_result as $user) : 
    $project_name = isset($projects[$user->project_id]) ? $projects[$user->project_id]->project_name : ""; 
    $project_id = isset($projects[$user->project_id]) ? $projects[$user->project_id]->project_id : ""; 
    if(!isset($result_arr[$project_name])): 
     $result_arr[$project_name] = array(); 
    endif; 
    $temp = array(
     'project_id ' => $project_id , 
     'project_name' => $project_name, 
     'user'   => $user->user_fname, 
     'user_id'  => $user->user_id 
    ); 
    $result_arr[$project_name][] = $temp; 
endforeach; 
echo '<pre>'; 
print_r($result_arr);exit; 

return $data; 
}` 
+0

謝謝Nitin糾正我.. – Snehal 2014-12-08 06:25:56

+0

提供的代碼只顯示有用戶的項目。如果項目沒有用戶,那麼它不顯示該項目。我希望所有項目,無論是用戶還是用戶不是 – Snehal 2014-12-08 06:38:42

+0

你是否更新狀態到 $ showOnlyHaveUser = TRUE; – 2014-12-08 09:43:46