php mysql只从列中选择几个月

时间:2013-02-06 20:33:43

标签: php mysql datetime

我遇到了这个问题的麻烦,无法找到解决方法。 任何帮助将不胜感激。

我有一个包含一系列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或其他任何月份,然后是存在的行数。

我基本上只需要给定月份的总行数。

任何帮助都会很棒。

1 个答案:

答案 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