2

我正在尝试从 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 完成一些繁重的工作。

4

2 回答 2

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 指出这一点。这是一个提醒,好的建议和好的代码一样重要!

于 2013-06-06T20:52:08.857 回答
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
于 2013-06-06T20:54:56.687 回答