0

この表を考えると:

CREATE TABLE `items` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`type` char(15) DEFAULT NULL,
`ext_id` varchar(255) DEFAULT NULL,
`timestamp` int(11) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`txt` text,
`url` varchar(255) DEFAULT NULL,
`longitude` float(9,6) DEFAULT NULL,
`latitude` float(9,6) DEFAULT NULL,
`meta` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41695 DEFAULT CHARSET=utf8;

2005〜2013の範囲のデータで、すべて(int)タイムスタンプ列にデータがある場合、このクエリは次のようになります。

SELECT DATE_FORMAT(`timestamp`, '%Y') as 'year',
COUNT(id) as 'total'
FROM items
GROUP BY DATE_FORMAT(`timestamp`, '%Y')

これを返します:

'year' => null
'COUNT(*)' => string '38710' (length=5)

'year' => string '2011' (length=4)
'COUNT(*)' => string '45' (length=2)

'year' => string '2012' (length=4)
'COUNT(*)' => string '67' (length=2)

'year' => string '2013' (length=4)
'COUNT(*)' => string '90' (length=2)

正しい結果が得られないのはなぜですか?を繰り返すと、SELECT * FROM items印刷時に正しい日付が得られる<?php print date('Y-m-d H:i', $item->timestamp); ?>ので、日付はそこにあります。

4

2 に答える 2

2

DATE_FORMATUNIXタイムスタンプを表す整数ではなく、引数としてMySQLの日付型が必要です。日付をUNIXタイムスタンプとして保存している場合(ちなみに、通常はそうすべきではありません)、それを。で変換する必要がありますFROM_UNIXTIME()。またYEAR()、DATE_FORMATを使用するよりも少し簡潔な、年を返す関数もあります。

簡単に言えば、あなたはYEAR(FROM_UNIXTIME(timestamp))

于 2013-03-06T14:16:39.397 に答える
1

DATE_FORMATdateは、最初の引数として受け入れます。あなたはintを与えています。

于 2013-03-06T14:16:38.883 に答える