0

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

我有一个包含一系列列的表,其中一个名为 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>";

我想要完成的是分开一月,二月等的行数......我已经尝试过这个查询,但我只得到这个月的 01、02。

$scorequerymonth=
    "SELECT DATE_FORMAT(PostDate, '%m') 
     FROM tablename 
     WHERE AgentID=$agent 
     ORDER BY PostDate";

我想知道的是,是否有人能告诉我如何找到或找出或找出 01 或 02 或其他月份以及存在的行数。

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

任何帮助都会非常好。

4

1 回答 1

0

你快到了。您需要添加一个GROUP BY子句,并返回一个聚合(例如COUNT(1)or 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
于 2013-02-06T20:45:04.817 回答