2016-11-13 12 views
2

私は2つのテーブル(user,user_group)を持っています。ユーザテーブルがforeachループで文を中断させる可能性がありますか?

------------+-------------+------------------+ 
| user_id | user_name | user_group(id) | 
------------+-------------+------------------+ 

user_group表は

+-----------------+-------------------+ 
| user_group_id | user_group_name | 
+-----------------+-------------------+ 

が含まれている含まれている場合今、私はJOINクエリを使用せずにそれらを結合してみてください。この問題を解決するためにdouble foreach()ループを使用しましたが、結果は返されません。私はbreakステートメントを使用することはできません。ループを使用して希望の結果を得るにはどうすればよいですか?望ましい結果は次のようになります。

+-----------+-------------+-------------------+ 
| user_id | user_name | user_group_name | 
+-----------+-------------+-------------------+ 

私がこれまで持っている:にグループ名でグループIDの識別子を変更している

public function user_get_item() 
{ 
    $this->db->select('*'); 
    $this->db->from('users'); 
    $results=$this->db->get()->result_array(); 
    $this->db->select('*'); 
    $this->db->from('user_group'); 
    $group_data=$this->db->get()->result_array(); 
    foreach($results as $v_results) 
    { 
     foreach($group_data as $v_group_data) 
     { 
      if($v_results['user_group']==$v_group_data['user_group_id']) 
      { 
       $v_results['user_group']=$v_group_data['user_group_name']; 
      } 
     } 
    } 
    return $results; 
} 

enter image description here

答えて

0

私はあなたがやろうとしているものだと思います一致する場合は現在の行だから、交換してください:

$results['user_group']=$v_group_data['user_group_name']; 

によって:

$v_results['user_group']=$v_group_data['user_group_name']; 

とにかく、何加入が悪いですの? SQLクエリを作成することは、ポリノミックループよりも常に速くなります。

+0

- $ v_results ...を置き換えると、同じ結果が得られます。しかし、あなたのお問い合わせ提案のおかげで@ Peregring-lk –

0

おそらくあなたは、この必要があります:

Array(
    0 => Array(
      [user_id] => 1, 
      [user_name] => John Doe, 
      [user_group] => 200 
     ), 
    1 => Array(
      [user_id] => 2, 
      [user_name] => Jane Doe, 
      [user_group] => 100 
    ) 
) 

そして:

Array(
    0 => Array(
      [user_group_id] => 100, 
      [user_group_name] => Admin 
    ), 
    1 => Array(
      [user_group_id] => 200, 
      [user_group_name] => Web User 
    ) 
) 

それがこの(キー、値として名前としてID)のように見えますので、グループの新しい配列を作る:

をこれを行うには
Array(
    [100] => Admin, 
    [200] => Web User 
) 

public function getUserGroups() 
{ 
    $rows = array(); 
    $this->db->select('*'); 
    $this->db->from('user_group'); 
    $group_data=$this->db->get()->result_array(); 
    foreach($group_data as $results) 
    { 
     $rows[$results['user_group_id']] = $results['user_group_name']; 
    } 

    return $rows; 
} 

次に、あなただけの他の方法で割り当てる:私はそれをテストしていないものの、私はJOINが速く/より良いことだと思うが、これはあなたが捜している結果を取得する必要があります。とにかく

public function userGetItem() 
{ 
    # Get all the user groups 
    $groupData = $this->getUserGroups(); 
    # Get your original user list 
    $this->db->select('*'); 
    $this->db->from('users'); 
    $results=$this->db->get()->result_array(); 
    $row = array(); 
    foreach($results as $users) { 
     $row[] = array(
      'user_id' => $users['user_id'], 
      'user_name' => $users['user_name'], 
      # Here you assign the group name from the user groups array 
      'user_group_name' => $groupData[$users['user_group']] 
     ); 
    } 

    return $row; 
} 

それは近いはずです。

関連する問題