当前查询工作完美的问题是当前月份(4月)没有数据,因此它没有将月份列为0,如何将月份列为0个interivews?
QUERY
select distinct from_unixtime(interv_date,'%M %Y') AS month, count(*) as totals
from " . TABLE_PREFIX . "interviews
group by month
order by interv_date desc
limit 6
请注意,interv_date列是一个纪元时间戳(例如:1428003691)
PHP
<table class=\"highchart\" data-graph-container=\"#graphcontainer\" data-graph-type=\"column\" data-graph-legend-disabled=\"1\">
<caption>Interviews by Month</caption>
<thead>
<tr>
<th>Month</th>
<th>Totals</th>
</tr>
</thead>
<tbody>
<?php
for ($i = 0; $i < $stat_logs["count"]; $i++) {
echo "<tr>\n";
echo "<td>" . $stat_logs[$i]["month"] . "</td>\n";
echo "<td>" . $stat_logs[$i]["totals"] . "</td>\n";
echo "</tr>\n";
}
?>
echo "</tbody>
echo "</table>
输出
Month Totals
March 2015 7
February 2015 5
January 2015 12
December 2014 18
November 2014 19
October 2014 5
我需要它输出这样的东西:
Month Totals
April 2015 0
March 2015 7
February 2015 5
January 2015 12
December 2014 18
November 2014 19
请注意,不是每个月都会有采访,所以它不会只是当月(第一个月) 如何在没有采访的情况下获得这些月份的任何帮助都会很棒。
答案 0 :(得分:0)
我已经在这个WAAAAAYYYY工作太久了。但这是一个开始...... http://sqlfiddle.com/#!9/23389/2
它运作得非常好,但它有点笨重,有两个临时表。但是没有硬编码日期!这些表实际上应该是临时表,虽然sqlfiddle没有使用临时表,所以我把它们变成了真正的表。
-- Get a table with the months of interest in it
SET @RightNow = curdate();
create table LastSixMonths (dateVal datetime);
Insert into LastSixMonths values(@RightNow);
Insert into LastSixMonths values(@RightNow - INTERVAL 1 MONTH);
Insert into LastSixMonths values(@RightNow - INTERVAL 2 MONTH);
Insert into LastSixMonths values(@RightNow - INTERVAL 3 MONTH);
Insert into LastSixMonths values(@RightNow - INTERVAL 4 MONTH);
Insert into LastSixMonths values(@RightNow - INTERVAL 5 MONTH);
-- Summarize the recent interviews
create table Totals (monthAndYear varchar (20), interviews int);
Insert into Totals
select distinct from_unixtime(intv.interv_date,'%M %Y') as monthAndYear,
count(*)
from interviews intv
group by from_unixtime(intv.interv_date,'%M %Y')
order by interv_date desc
limit 6
-- Do a left join on recent months and summarized interviews
select date_format(six.dateval, '%M %Y'),
IF (interviews IS NULL, 0, Interviews) as totalInterviews
from LastSixMonths six
left join Totals tot
on date_format(six.dateval, '%M %Y') = tot.monthAndYear
order by six.dateval desc
limit 6;