我有两张桌子(user
,user_group
)。用户表包含
------------+-------------+------------------+
| 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;
}
答案 0 :(得分:0)
我认为您尝试做的是将组ID标识符更改为当前行中的组名称(如果它们匹配)。所以,替换:
$results['user_group']=$v_group_data['user_group_name'];
由:
$v_results['user_group']=$v_group_data['user_group_name'];
无论如何,加入的错误是什么?使SQL查询总是比多项式循环更快。
答案 1 :(得分: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为键,Name为值):
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
会更快/更好,但这应该可以得到你想要的结果,虽然我没有测试过,但它应该很接近。