1

ユーザーが選択した日付に基づいて、データベースから数値データを取得しています。なんらかの理由で、関数を選択して今日のデータをすべて取得すると (何もありません)、それでも null 値の配列が形成されます。

問題は 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 エコーが既存のデータを表示します。私が理解していないのは、なぜクエリが何かを返すのですか? 失敗ばかりじゃないのはなぜ?そして、この問題をキャッチするチェック/ループを実行し、その日付にデータが存在しないことをユーザーに知らせるエラーメッセージを表示するにはどうすればよいですか?

4

2 に答える 2

1

これが集計関数 ( sum()avg()max()およびその他の関数) の動作であり、結果セットから集計値を返します。結果セットが空の場合は、それを集計します。これは多くの混乱とバグレポートを引き起こしますが、これがどのように機能するかです。より詳細な説明については、dba.stackexchange.com を参照してください

を使用して値をより有用なものCOALESCEに置き換えるか、a を追加して、sを生成するために使用された行数を確認できます。NULLcount()sum()

奇妙なことに、グループを追加すると、期待どおりに動作します (少なくとも mysql では):

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

しかし:

SELECT sum(id) FROM `users` WHERE 0 GROUP BY null # => array()
于 2013-07-01T18:40:47.253 に答える