使用CodeIgniter的数据库查询将空值返回到数组中?

时间:2013-07-01 18:23:20

标签: php database arrays codeigniter

我根据用户选择的日期从数据库中提取数字数据。出于某种原因,当我选择我的函数来提取今天的所有数据(没有)时,它仍然会形成一个空值数组。

我认为问题出在select_sum()或where()函数中。这是我的CI查询:

    $this->db   
            ->select_sum('column1')
            ->select_sum('column2')
            ->select_sum('column3')
                ->where('created_at >=', date('Y-m-d'));
            $query = $this->db->get('table_name');

这是我的foreach循环,它将所有选定的数据拉入一个数组,以便在整个页面中使用:

$popular_items_array = array();
        foreach ($query->result() as $key => $row) 
        {   
            if ($row == NULL) {
                echo "Error populating table.";
            } else {
             $popular_items_array = $row;
            }
        }

为了查看数据,我接着做了:

echo json_encode($popular_items_array);

结果证明了这一点:

{"column1":null,"column2":null,"column3":null}

如果我选择不同的时间范围(数据实际存在于设定日期之前),则相同的JSON回显将显示现有数据。我不理解的是,为什么查询会返回任何内容?为什么不是失败?我怎样才能运行一个能够解决这个问题的检查/循环,并显示一条错误消息,让用户知道该日期没有数据存在?

2 个答案:

答案 0 :(得分:3)

如果您不想回复任何记录,可以修改您的代码:

$this->db   
    ->select_sum('column1')
    ->select_sum('column2')
    ->select_sum('column3')
        ->where('created_at >=', date('Y-m-d'))
        ->having('count(*) > 0');
$query = $this->db->get('table_name');

答案 1 :(得分:1)

这是聚合函数(如sum()avg()max()和其他函数)的工作方式,它们将返回结果集中的聚合值。如果结果集是空的,则它们将聚合该结果集。这导致很多confusionbugreports,但这应该是如何工作的,更详细的说明can be found at dba.stackexchange.com

您可以使用COALESCENULL值替换为更有用的值,也可以添加count(),以便了解用于生成{{1}的行数}}第

奇怪的是,如果你添加一个组,它将按你的预期工作(至少使用mysql):

sum()

可是:

SELECT sum(id) sum_id FROM `users` WHERE 0 # => array( array('sum_id' => null) )