我遇到了这个问题,找不到解决办法。任何帮助都将不胜感激。
我有一张桌子,上面有一系列的柱子,其中一个名叫PostDate。它包含以下数组,我将其输出为表,以便更好地查看。
PostDate
0000-00-00
2013-01-08
2013-01-10
2013-01-11
2013-01-15
2013-01-16
2013-01-18
2013-01-18
2013-01-18
2013-01-19
2013-01-19
2013-01-23
2013-01-23
2013-01-24
2013-01-26
2013-01-29
2013-01-29
2013-01-29
2013-01-30
2013-01-31
2013-01-31
2013-02-01
2013-02-02
2013-02-02
代码是这样的。
$scorequerymonth=
"SELECT PostDate
FROM tablename
WHERE AgentID=$agent
ORDER BY PostDate";
$scoreresultmonth=mysql_query($scorequerymonth, $scoreconnection) or die('Could not connect agent: ' . mysql_error());
$scoretotwos=mysql_num_rows($scoreresultmonth);
echo "<br>";
echo "scoretotwos: " . $scoretotwos;
echo "<br>";
echo "<table border='1'><tr>";
for($i = 0; $i<mysql_num_fields($scoreresultmonth); $i++)
{
echo "<th>".mysql_field_name($scoreresultmonth, $i)."</th>";
}
echo "</tr>";
while($row = mysql_fetch_array($scoreresultmonth))
{
echo "<tr>";
for($i = 0; $i < mysql_num_fields($scoreresultmonth); $i++)
{
echo "<td>". $row[$i] ."</td>";
}
echo "</tr>";
}
echo "</table>";
echo "<br>";
我想完成的是分离1月、2月等的行数。。。我试过这个查询,但我只得到了本月的01,02。
$scorequerymonth=
"SELECT DATE_FORMAT(PostDate, '%m')
FROM tablename
WHERE AgentID=$agent
ORDER BY PostDate";
我想知道的是,是否有人能告诉我如何查找或计算01或02或其他月份,以及存在的行数。
我基本上只需要给定月份的总行数。
任何帮助都将是极好的。
你差不多到了。您需要添加一个GROUP BY
子句,并返回一个聚合(例如COUNT(1)
或SUM(1)
):
SELECT DATE_FORMAT(t.PostDate,'%m') AS post_month
, COUNT(1) AS count_for_post_month
FROM tablename t
WHERE t.AgentID=$agent
GROUP BY post_month
请注意,通过只返回日期值中的'01'和'02',这将在每个日期值中组合多个年份。例如,"01"的"计数"将包含从所有年份的1月开始的匹配行计数,所有行组合在一起:"2011-01"、"2012-01"、"2013-01"
通常的模式是包括年份,并获得特定日历月的计数:
SELECT DATE_FORMAT(t.PostDate,'%Y%m') AS post_yyyymm