Codeigniter数据库查询问题

时间:2011-02-14 17:37:06

标签: php 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); 它给了我: array(2){[0] => array(1){[“app_id”] => string(1)“2”} [1] => array(1){[“app_id”] => string(1)“3”}}

我决定进行多次查询而不是连接,因为我将添加其他列以从第二个查询中进行选择。

感谢您的帮助。

1 个答案:

答案 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