计算以天为单位的所有数据库条目

时间:2013-06-24 09:17:12

标签: mysql codeigniter

我有一个表格,格式如下:

offer_id     consumer_id     date
1            1               1282454200
1            1               1282453200
2            2               1282453240
1            3               1282455200
2            1               1282453210

“date”采用unix格式。

我需要计算所有的日常条目,所以如果我有昨天的10个条目和今天的8个条目,我应该得到:

2013-06-23    10
2013-06-24    8

这是我尝试优化代码的工作的一部分,到目前为止,我一直通过PHP代码执行此操作,但您可以想象随着数据库的增长会发生什么:)。这是我的php(codeigniter)尝试,我正在尝试(未成功)转换为mysql:

foreach ($offers as $item) {
            $date = $item->date;
            $day_date = date("Y-m-d", $date);
            $day_start = strtotime(date("Y-m-d 00:00:00", $date));
            $day_end = strtotime(date("Y-m-d 23:59:59", $date));
            if (!in_array($day_date, $day_array)) {
                $day_array[] = $day_date;

                $this->db->where("date >=", $day_start);
                $this->db->where("date <=", $day_end);
                $this->db->from("offers_consumers_history");
                $total_points = $this->db->count_all_results();

                $db_date = array($day_date, $total_points);
                $data[] = $db_date;
            }
        }

我基本上抓住了之前查询中的所有条目并经历了每个日期,如果日期不在我的最终数组中,我必须通过计算从00:00:00到23:59的所有结果: 59。

寻求有关构建等效SQL代码的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用此SQL查询:

SELECT   DATE(FROM_UNIXTIME(date)), COUNT(*)
FROM     offers_consumers_history
GROUP BY DATE(FROM_UNIXTIME(date))

请参阅小提琴here

答案 1 :(得分:0)

尝试

SELECT count(*) as cnt , date FROM `my_table` GROUP BY date

然后您可以将它们更改为您所需的格式。将日期更改为FROM_UNIXTIME然后计算

非常简单

答案 2 :(得分:0)

如果我理解你的问题,group by就是你需要的