我有一个表格,格式如下:
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代码的帮助。
答案 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就是你需要的