我有一张图表,我想填写每月有多少记录的信息。图表需要以这种格式接收数据:
data: [
["Jan", 140],
["Feb", 240],
["Mar", 190],
["Apr", 140],
["May", 180],
["Jun", 320],
["Jul", 270],
["Aug", 180]
],
我需要生成每月有多少记录。我的数据库看起来像:
id | start | end |
------------------------------
1 | 2015-10-01 | 2015-10-31 |
2 | 2015-10-05 | 2015-10-09 |
3 | 2015-10-06 | 2015-10-07 |
4 | 2015-11-01 | 2015-11-02 |
5 | 2015-11-03 | 2015-11-06 |
6 | 2015-11-09 | 2015-10-13 |
7 | 2015-11-16 | 2015-10-18 |
8 | 2015-11-21 | 2015-10-29 |
因此,我们在10月份有3条记录,11月有5条记录。 我应该如何正确地初始化一个函数,该函数最终会返回一个我可以传递给数据的正确格式? 我可以获取像
这样的记录MODEL:
function specialtest($start, $end) {
$q = ("SELECT count(*) as count FROM reservations WHERE end > '$start' and start < '$end'");
$query = $this->db->query($q);
print json_encode($query->result_array());
exit;
}
然后在控制器中:
$data = $this->model->specialtest($arg, $arg2);
然而,这不是我所需要的。我每个月都需要这些记录而不会调用任何函数参数,因为我不知道它们?任何想法?
答案 0 :(得分:4)
只要此功能未在应用程序的其他位置使用,请将查询更新为:
$q = "SELECT DATE_FORMAT(start, '%b') as month, DATE_FORMAT(start, '%Y') as year, count(*) as count FROM reservations WHERE end > '$start' and start < '$end' GROUP BY DATE_FORMAT(start, '%b-%Y')";
请注意,您需要包含年份,以便明年您不会抓住上一年的参赛作品。
答案 1 :(得分:0)
function specialtest() {
$data = [];
$year = 2015;
for ($i=1; $i<=12; $i++){
$sql = 'SELECT count(*) as count FROM reservations WHERE YEAR(start) = '.$year.' AND MONTH(start)='.$i;
$query = $this->$db->query($sql);
$results = $query->result_array();
$data[] = [date('M', strtotime($year.'-'.$i.'-01')) => $results[0]['count']];
}
echo json_encode($data);
exit();
}