2016-11-13 59 views
2

我有两个表格(user,user_group)。当用户表中包含可能在foreach循环中打破语句吗?

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

user_group表包含

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

现在我尝试加入他们的行列,而无需使用JOIN查询。为了解决这个问题,我使用了双重foreach()循环,但没有结果返回。我不能使用break声明。我如何使用循环来获得期望的结果?理想的结果是:

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

我到目前为止有:

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

我认为你正在试图做的是改变由组名组ID标识当前行如果匹配。因此,更换:

$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; 
} 

然后你只需指定的其他方法:

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; 
} 

无论如何,我认为JOIN会更快/更好,但这应该得到你正在寻找的结果,虽然我没有测试它,它应该接近。