我遇到了这个问题的麻烦,无法找到解决方法。 任何帮助将不胜感激。
我有一个包含一系列colums的表,其中一个名为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或其他任何月份,然后是存在的行数。
我基本上只需要给定月份的总行数。
任何帮助都会很棒。
答案 0 :(得分:0)
你快到了。您需要添加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