PHP和MySQL日期发生查询

时间:2013-06-06 20:43:51

标签: php mysql

我正在尝试从MySQL数据库中获取一些用于PHP的数据。好像我应该能够让MySQL输出我需要的数字,而不必在事后用PHP计算它。

所以这就是我要做的。我想计算每个月的参赛人数。所以我有一个看起来像这样的数据库。

DateTimeOriginal
2004:11:06 09:58:31
2004:11:08 10:00:25
2004:12:28 12:00:45
2005:03:02 05:00:15
2005:03:15 23:12:10

我想写一个基本上输出这个的查询。

echo $row[0] . ":" . $row[1] . " = " . $row[2];

2004:11 = 2
2004:12 = 1
2005:03 = 2

我尝试了一些东西,看不到把我的大脑包裹起来。我对MySQL很陌生,但我知道有一些方法可以让MySQL做一些繁重的工作。

2 个答案:

答案 0 :(得分:0)

您希望结果列($row[0]等)为:

  • 第0列:年份
  • 第1列:月份(左边用零填充到长度为2)
  • 第2栏:计数

在这种情况下,这应该有效:

SELECT
  YEAR(DateTimeOriginal) AS TheYear,
  DATE_FORMAT(DateTimeOriginal, '%m') AS TheMonth
  COUNT(*)
FROM myTable
GROUP BY
  YEAR(DateTimeOriginal),
  DATE_FORMAT(DateTimeOriginal, '%m')
ORDER BY TheYear, TheMonth

附录:如果两列正常(一列用于格式化的年/月,一列用于计数),则查询变得更加简单。

SELECT
  DATE_FORMAT(DateTimeOriginal, '%m:%Y') AS YearMonth,
  COUNT(*)
FROM myTable
GROUP BY DATE_FORMAT(DateTimeOriginal, '%m:%Y')
ORDER BY YearMonth

非常感谢@GordonLinoff指出这一点。这提醒人们,好的建议和好的代码一样重要!

答案 1 :(得分:0)

这应该这样做:

Select year(a.DateTimeOriginal) as theYear, month(a.DateTimeOriginal) as theMonth,count(b.subDate) as theCount
From table a
    Inner Join (
        Select SUBSTR(DateTimeOriginal,7) as subDate) b
    On a.DateTimeOriginal = b.DateTimeOriginal