我有以下代码
public function get_request($requestid)
{
$this->db->select('*');
$this->db->from('instanthire as s');
$this->db->join('instanthire_skills as ss', 's.id = ss.requestid');
$this->db->where('s.id',$requestid);
$query = $this->db->get();
return $query->result_array();
}
我得到的结果数组是
Array
(
[0] => Array
(
[id] => 1
[userid] => 1
[skills] => html
)
[1] => Array
(
[id] => 2
[userid] => 1
[skills] => core php
)
)
Array
(
[0] => Array
(
[id] => 3
[userid] => 2
[skills] => Core Java
)
[1] => Array
(
[id] => 4
[userid] => 2
[skills] => Advance Java
)
[2] => Array
(
[id] => 4
[userid] => 2
[skills] => .net
)
)
问题是,对于每个用户id数组的数量随着技能的增加而增加,我希望为每个用户id和技能创建一个数组,该用户应该在主数组内。有谁能告诉我如何纠正我的数组
表结构instanthire
id userid
1 1
2 2
instanthire_skills
id requestid skills
1 1 html
2 1 core php
3 2 core java
4 2 advance
5 2 .net
期望输出
Array
(
[0] => Array
(
[id] => 1
[userid] => 1
[skills] => Array
(
[0] => html
[1] => core php
)
)
[1] => Array
(
[id] => 3
[userid] => 2
[skills] => Array
(
[0] => core java
[1] => advance java
[2] => .net
)
)
)
没有一个查询可以满足您的要求。在从数据库中检索值之后,您将不得不进行一些处理。
我的建议是使用mysql函数Group_Concat()
返回一个逗号分隔的列表(字符串)的技能。您可以通过explode()
来创建技能数组。
在这个例子中,我放弃了表别名的使用,因为我混淆了:)
因为您的where
子句只会返回一行(instanthire
中只有一行具有任何给定的userid
值-对吗?)我使用$query->row_array()
来获取数据。这简化了返回到单个数组的操作,而不是像$query->result_array()
那样返回数组的数组。
public function get_request($requestid)
{
$this->db->select('instanthire.id, Group_Concat(instanthire_skills.skills) as skills');
$this->db->from('instanthire');
$this->db->join('instanthire_skills', 'instanthire.id = instanthire_skills.requested_id' , 'inner');
$this->db->where('instanthire.userid', $requestid);
$query = $this->db->get();
$result = $query->row_array();
$result['skills'] = explode(",", $result['skills']);
return $result;
}
让我们假设您运行了以下两行代码
$data = $this->get_request(2);
var_dump($data);
在get_request()
里面在$result = $query->row_array();
之后加上var_dump($result);
你会得到这个
array (size=2)
'id' => string '2' (length=1)
'skills' => string 'core java,advance,.net' (length=22)
, get_request()
返回后var_dump($data);
显示
array (size=2)
'id' => string '2' (length=1)
'skills' =>
array (size=3)
0 => string 'core java' (length=9)
1 => string 'advance' (length=7)
2 => string '.net' (length=4)
如果你想处理多个userid
,那么你将需要更多的代码。如果你需要看的话请告诉我