1

私は次のようなMySQLデータベースを持っています:

Name: Joe
Items: 25
CreationDate: 2012-04-14 18:49:50

Name: John
Items: 89
CreationDate: 2012-04-14 18:47:17

Name: Bill
Items: 95
CreationDate: 2012-04-09 12:34:08

Name: Bob
Items: 35
CreationDate: 2012-04-09 12:18:23

私がやりたいのは、CreationDateで行をグループ化することです(日のみに基づいて、最後の時刻は要因ではありません)。そして、アイテムを一緒に追加して、アイテム/日を考え出します。

したがって、出力は次のようになります。

2012-04-09 - 130 items
2012-04-14 - 114 items

MySQLでGroupByを試しましたが、正しく使用しているかどうかわかりません。

$sql = mysql_query("SELECT SUM(Items), CreationDate FROM People GROUP BY CreationDate ORDER BY CreationDate DESC") or die(mysql_error());
while($row = mysql_fetch_array($sql) ) {
    echo '<p>' . $row['CreationDate'] . ' - ' . $row['SUM(Items)'] . '</p>';
}

完全に一致する作成日(秒単位まで)でのみグループ化することを除いて、その種の作業であり、それを修正する方法がわかりません。

4

1 に答える 1

4

次のように、CreationDateフィールドにdate関数を使用する必要があります。

SELECT SUM(Items), DATE(CreationDate) FROM People GROUP BY DATE(CreationDate) ORDER BY CreationDate DESC

ただし、警告:DATE関数を使用すると、CreationDateのインデックスはすべて無視されます。CreationDateフィールドにインデックスが付けられている場合、DATE関数を使用してグループ化すると、はるかに長い時間がかかります。

于 2012-04-16T22:33:25.993 に答える