我在codeigniter中执行以下查询,无法弄清楚如何使第二个查询起作用。如何获取第一个查询中的值的数组,并在第二个查询中使用它?
function application()
{
$user_id = $this->tank_auth->get_user_id();
$this->db->select('app_id')->from('using')->where('user_id' , $user_id);
$query = $this->db->get();
$row = $query->result_array();
if ($query->num_rows() > 0) :
$this->db->select('app_name')->from('applications')->where('id' , $row['app_id']);
$body['query'] = $this->db->get();
endif;
$this->load->view('apps_view', $body);
如果我注释掉第二个查询并var_dump($row);
它给了我:
array(2){[0] => array(1){[“app_id”] => string(1)“2”} [1] => array(1){[“app_id”] => string(1)“3”}}
我决定进行多次查询而不是连接,因为我将添加其他列以从第二个查询中进行选择。
感谢您的帮助。
答案 0 :(得分:2)
您是否希望第一个查询只返回一个行?
如果是,那么你应该使用:
$query = $this->db->get();
$row = $query->row();
$app_id = $row->app_id;
//etc
你的问题并不清楚。
如果第一个查询返回(或可以返回)多行,则需要执行以下操作:
$query = $this->db->get();
if ($query->num_rows() > 0) :
foreach($query->result_array() as $row)
{
$this->db->select('app_name')
->from('applications')
->where('id' , $row['app_id']);
}
$body['query'] = $this->db->get();
endif;
// etc
你很可能需要调整代码,因为我不确定你想要的结果是什么。你看得到差别吗?
如果你返回result_array
,你会得到一系列结果(看上去那么!) - 这就是为什么你的var_dump
有[0]=> array(1)
等等 - 返回的每一行都有一个数组。
如果您只想要/期望从第一个查询返回一个结果,则应使用row
代替。
希望这是有道理的 - 应该是朝着正确的方向发展。
修改强> 实际上这可能是正确的语法:
$query = $this->db->get();
if ($query->num_rows() > 0) :
$this->db->select('app_name')->from('applications');
foreach($query->result_array() as $row)
{
$this->db->where('id' , $row['app_id']);
// build the `where...` string with iteration/result/row
}
$body['query'] = $this->db->get(); // now we get the data.
endif;
// etc