2010-11-19 10 views
1

データベースにいくつかの日付/イベントがあります。私は月単位で注文しています(年は関係ありません) - 今はすべてのタイムスタンプがUNIXでeventDateという名前の列。そのクエリはどのように作成できますか?mysql ORDER BY "unixtime"(月)

明らか

それはそれらをソートし、私はすべての年にわたるすべてのイベントが月によってグループ化されていることを確認したいEVENTDATE

BYカレンダーORDER FROM

SELECT * - その後、明らかに彼らに1月、2月、3月、などを配置する必要があります

アドバイスはありますか?

ありがとうございます!

答えて

3

FROM_UNIXTIME()関数+ MONTH()関数を使用できます。

SELECT MONTH(FROM_UNIXTIME(0)); 
-- 12 

しかし、本当のタイムスタンプ(YYYY-MM-DD HH:II:SS)上でのUNIXタイムスタンプを保存する理由はありません。 RDBMSには日付を操作する関数があります.UNIXタイムスタンプが本当に必要な場合(TBHはありません)、UNIX_TIMESTAMP関数を使用できます。

2

UNIX時間を使用する理由はたくさんあります。優れたデータベース設計は、データベースとWebサイト、特に成功したビジーなものをどれだけ高価にするかに大きく影響します。

私が知っている最善のケースは.. 本当に忙しいサーバーで、時刻データを保存する必要がありますが、時間データは実際にアクセスされる読み取りと書き込みの回数に比べてほとんどアクセスされませんデータベース。その時間データのすべての操作を行うにはCPUリソースが必要です。絶対に必要な場合を除き、そうしないでください。

実生活の例は自分のものです。私たちは4つのフロントエンドWebサーバーを必要とし、さらに多くを追加しようとしていました。彼らも古いし、更新が必要でした。必要とされる6台の交換用サーバを見てみると、私たちには一束のコストがかかるだろう。私たちが何をしているかを見極めることにしました。私たちは現在、4または6の代わりに2つのフロントエンドサーバーを持っています。データベース構造とクエリ、およびそれらからデータを挿入して読み取るコードを最適化します。

PHPコードの1行を変更し、yyyy-dd-mm hh:mm:ssの代わりにtimeカラムをunixに変更し、timeカラムにインデックスを追加し、 1回の操作が0.08秒から0.00031秒になり、終了することを開始しました。 CPUリソースへの多大な影響が大きかった。次の待ち行列に入れられた操作はより速く実行されます。

これは、人々がデータベースデザイナーとして仕事をしている理由です。本当に重要です。

もちろん、あなたのウェブサイトが遅くてビジーでない場合は、おそらく誰も気付かないでしょう。 しかし、あなたが成功すれば、それは重要です。 ビジー状態のサイトがあり、サーバーが低速になる場合は、このようなことを見てください。あなたは、新しいボックスまたはより多くのmemmoryを必要としないかもしれません、あなただけのコードをクリーンアップし、dbを最適化する必要があるかもしれません。

タイムスタンプ、その形式、使用方法と保存方法