【问题标题】:Codeigniter - use query result in another query [closed]Codeigniter - 在另一个查询中使用查询结果[关闭]
【发布时间】:2013-05-03 09:17:56
【问题描述】:

在我的控制器中,我有一个查询结果列表(最多 10 行左右)。我正在尝试使用查询的结果在另一个中使用。例如,第一个查询提取“agency_ID”(我希望在下一个查询中使用的数据)

控制器:

$data['list_report'] = $this->reports_model->filteredReport();
$data['area_data'] = $this->reports_model->getAreaDataReport($data['list_report']);

型号:

function getAreaDataReport($data)
{       
    $query = $this->db->query('SELECT COUNT(asa.sector_ID) AS area_count, asa.*, ags.sector
    FROM agencies_sector_association asa, agencies_sector ags WHERE agency_ID IN ('. $data->agency_ID .')
    AND asa.agency_ID = ags.ID
    GROUP BY agency_ID');
    return $query->result();
}

我收到此错误:

Message: trying to get property of non-object codeigniter model

当我 print_r 第一个查询结果时,我得到以下信息。

Array ( [0] => stdClass Object ( [case_ID] => 1 [reference_ID] => IFSOU001 [ID] => 1 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 3 [task] => Domestic violence [outcome_ID] => 3 [outcome] => Protection plan no longer in place [creation_date] => 2012-12-05 ) [1] => stdClass Object ( [case_ID] => 3 [reference_ID] => NEW REFERENCE ID [ID] => 2 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 1 [task] => Transport [outcome_ID] => 8 [outcome] => Bespoke needs based assessment received [creation_date] => 2013-05-01 ) [2] => stdClass Object ( [case_ID] => 6 [reference_ID] => REFERENCE ID [ID] => 6 [agency_ID] => 1 [agency_name] => Agency1 [task_ID] => 2 [task] => Counselling [outcome_ID] => 2 [outcome] => Improved school attendance [creation_date] => 2013-05-01 ) )

我的问题是如何在下一个语句中使用第一个语句的机构 ID 作为数组,这样它就不会只返回一行。从这个结果中,我得到了 3 个“agency_ID”结果,但在未来的搜索中可能会更多。

非常感谢所有可以提供帮助的人!

【问题讨论】:

    标签: php mysql codeigniter object


    【解决方案1】:

    $data 是一组仅包含一个对象的对象。

    $data->agency_ID 替换为$data[0]->agency_ID

    这将为您提供存储在$data 数组中位置[0] 的对象的agency_ID 成员变量。

    假设您在结果数组中有多个对象,您需要获取 id 并将它们存储在一个字符串中,然后在查询中使用此字符串

    $id_str = '';
    foreach($data as $agency) {
        $id_str .= $agency->agency_ID . ', ';
    }
    $id_str = rtrim($id_str, ', '); //remove the trailing comma and space
    

    现在将查询中的 $data->agency_ID 替换为 $id_str

    【讨论】:

    • 完美运行,谢谢!投我一票!
    【解决方案2】:

    您必须重新格式化结果数组,使其适合IN 语句。格式类似于23, 17, 20$this->reports_model->filteredReport(); 应该返回 result_array()

    $data['list_report'] = $this->reports_model->filteredReport();
    
    $data_list = array();
    
    foreach($data['list_report'] as $lp) {
        $data_list[] = $lp->agency_ID;
    }
    
    $data['area_data'] = $this->reports_model->getAreaDataReport(implode(',',$data_list));
    

    然后只需在查询中使用该字符串:

    function getAreaDataReport($data)
    {       
        $query = $this->db->query('SELECT COUNT(asa.sector_ID) AS area_count, asa.*, ags.sector
        FROM agencies_sector_association asa, agencies_sector ags WHERE agency_ID IN ('.$data.')
        AND asa.agency_ID = ags.ID
        GROUP BY agency_ID');
        return $query->result();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多