2011-02-14 51 views
0

我在codeigniter中执行以下查询,无法弄清楚如何让第二个查询工作。我如何从我的第一个查询中获取一组值,并在第二个查询中使用这些值?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); 它给我: 阵列(2){[0] =>数组(1){[“APP_ID”] =>串(1)“2 “} [1] => array {1} {[”app_id“] => string(1)”3“}}

我决定做多个查询而不是连接,因为我将添加额外的列从第二个查询中选择。

感谢您的帮助。

+0

什么第二个查询的回报? – 2011-02-14 17:41:15

回答

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 
+0

看到我的编辑..我认为这就是你在〜 – Ross 2011-02-14 17:59:49