Php 使用CodeIgniter向数组返回空值进行数据库查询?

Php 使用CodeIgniter向数组返回空值进行数据库查询?,php,database,arrays,codeigniter,Php,Database,Arrays,Codeigniter,我根据用户选择的日期从数据库中提取数字数据。出于某种原因,当我选择我的函数来提取今天的所有数据(没有)时,它仍然会形成一个空值数组 我认为问题在于select_sum()或where()函数。以下是我的CI查询: $this->db ->select_sum('column1') ->select_sum('column2') ->select_sum('column3')

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

我认为问题在于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 echo将显示现有数据。我不明白的是,为什么查询会返回任何东西?为什么不失败呢?我如何运行一个检查/循环来发现这个问题,并显示一条错误消息,让用户知道该日期没有数据?

这就是聚合函数(如
sum()
avg()
max()
和其他)的工作方式,它们将从结果集中返回聚合值。如果结果集为空,他们将聚合该结果集。这会导致很多问题,但这是如何工作的,一个更详细的解释

您可以使用
COALESCE
NULL
值替换为更有用的值,也可以添加
count()
,这样您就可以知道有多少行用于生成
sum()
s

奇怪的是,如果您添加一个组,它将按照您的预期工作(至少在mysql中):

但是:


聚合函数(如
sum()
avg()
max()
等)就是这样工作的,它们将从结果集中返回聚合值。如果结果集为空,他们将聚合该结果集。这会导致很多问题,但这是如何工作的,一个更详细的解释

您可以使用
COALESCE
NULL
值替换为更有用的值,也可以添加
count()
,这样您就可以知道有多少行用于生成
sum()
s

奇怪的是,如果您添加一个组,它将按照您的预期工作(至少在mysql中):

但是:


如果您不想收回任何记录,您可以将代码修改为:

$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');

如果您不想收回任何记录,您可以将代码修改为:

$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');

$this->db->last_query()的作用是什么;在$query=$this->db->get('table_name')之后返回;线路?我很想看看实际的查询是什么样子。@DazzKnowles这个查询看起来像这个SUM(
column1
)作为column1,SUM(
column2
)作为column2,SUM(
column3
)作为column3 FROM(
table_name
),其中
创建于
='2013-07-01'this->db->last_query();在$query=$this->db->get('table_name')之后返回;线路?我很想看看实际的查询是什么样子的。@DazzKnowles这个查询看起来像这个SUM(
column1
)作为column1,SUM(
column2
)作为column2,SUM(
column3
)作为column3 FROM(
table\u name
),其中
创建于
='2013-07-01'Hmm,所以添加了“having()”将阻止查询通过,但我如何才能检查它是否失败?这是真正的问题-显示这些求和查询是否真的在做任何相关的事情。修复了这个问题,我添加了一个if语句,表示if(empty($popular\u items\u array)Hmm,因此添加了“having()”将停止查询,但我如何才能检查它是否失败?这是真正的问题-显示这些求和查询是否实际执行了相关操作。修复了此问题,我添加了一个if语句,表示if(empty($popular\u items\u array)
$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');