1

我有一个格式如下的表:

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

“日期”是 unix 格式。

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

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

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

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 代码方面寻求帮助。

4

3 回答 3

2

你可以使用这个 SQL 查询:

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

在此处查看小提琴。

于 2013-06-24T09:19:44.193 回答
0

试试喜欢

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

FROM_UNIXTIME然后您可以将它们更改为您需要的格式。将日期更改为然后计数很简单和相同

于 2013-06-24T09:19:00.930 回答
0

如果我正确理解了您的问题,那么您需要的是group by

于 2013-06-24T09:20:46.437 回答