0

我正在使用 WAMP 服务器 2.4。我试图获取数据库中不同月份的计数,但收到此错误“调用非对象 result_array() 上的成员函数 row()”。这是我的模型类的代码

public function get_current_month()
{

    $this->db->select('(COUNT(DISTINCT  Month))' );
    $this->db->from('site_data');
    $this->db->where('year =(');
    $this->db->select('MAX(year )');
    $this->db->from('site_data)');
    $query = $this->db->get();


    return $query->result_array(); //error here

}

我相信这与代码中的子查询有关,因为当我使用它时

public function get_current_month()
{

    $this->db->select('(COUNT(DISTINCT  Month))' );
    $this->db->from('site_data');
    $this->db->where('year =2013');
    //$this->db->select('MAX(year )');
    //$this->db->from('site_data)');
    $query = $this->db->get();


    return $query->result_array();

}

它工作得很好。我正在使用代码点火器

有谁知道这里出了什么问题。

这是我在数据库中测试的查询,它运行良好

SELECT (COUNT(DISTINCT MONTH))
FROM site_data
WHERE YEAR = ( 
    SELECT MAX(YEAR) 
    FROM site_data
)
4

3 回答 3

0

看起来您要么需要将子查询手工制作成->where()调用,要么使用某种第三方库。请参阅处理类似问题的 codeigniter 活动记录中的子查询。

于 2013-10-10T18:23:08.243 回答
0

我只有一次 CI 的经验,但很明显,您尝试通过嵌套 db->select 等来调用子查询的方式并不完全正确。可能有一种建立子查询的方法,但是......

为简单起见,您可以试试这个:

public function get_current_month()
{

    $this->db->select('(COUNT(DISTINCT  Month))' );
    $this->db->from('site_data');
    $this->db->where('year =( SELECT MAX(year) FROM site_data)');
    $query = $this->db->get();


    return $query->result_array(); //error here

}

如果它有效,为什么让它变得更复杂?

于 2013-10-10T20:04:48.953 回答
0

非常感谢你们。我认为添加一个从数据库获取 MAX(year) 的函数然后将值传递给我的函数会很容易。

我这样解决了

public function get_current_month($Year)
{
    $MAXYear=$Year;
    $this->db->select('(COUNT(DISTINCT  Month))' );
    $this->db->from('site_data');
    $this->db->where('year',$MAXYear);
    $query = $this->db->get();

    return $query->result_array();

}

其中 year 是我从控制器传递给 get_current_month() 的值。

它就像魅力一样。

非常感谢您的所有建议。

于 2013-10-11T02:14:47.130 回答