- ベストアンサー
mysql,phpで日付型に曖昧な日付を並べる方法について
- 商品データベースサイトの日付型に曖昧な日付(2011年夏、2011年4月下旬など)を入力し、意味合いに基づいて並べる方法について質問します。具体的なイメージやテーブルの構造を示しました。
- 質問内容はmysqlもしくはPHPを使用して、商品データベースサイトの日付型に曖昧な日付を入力し、意味合いに基づいて並べる方法を教えて欲しいものです。
- 具体的なイメージとして、テーブルにセブン、タイタニック、パイレーツなどの映画タイトルと発売日を登録し、タイタニック、ファイトクラブ、セブンなどの順に並べる方法を知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
カラム[hatsubai]がDATE型である以上、日付しか入れることができないため 現状の構成のままでは実現不可能であるとおもいます。 少なくとも「あいまいな日付」であるというデータをなにかしら持つ必要があるとおもいます。 カラムを増やさないとすれば[hatsubai]をDATETIME型にし 時間の部分をあいまいな日付の分類に使ってみてはどうでしょうか? たとえば 0:00はあいまいでない日付 01:00は1月 01:10は1月上旬 01:20は1月中旬 01:30は1月下旬 02:00は2月 ・ ・ 12:00は12月 12:10は12月上旬 12:20は12月中旬 12:30は12月下旬 13:00は春 14:00は夏 15:00は秋 16:00は冬 などというようにして 読んできた日時データから表示する発売日をPHP側で決定する、という感じで。 タイタニック , 2005-2-5 ファイトクラブ , 2008-3-14 セブン , 2010-7-30 トロイ , 2011-9-8 パイレーツ , 2011年4月下旬 ナルニア , 2011年冬 でしたら タイタニック , 2005-02-05 0:00 ファイトクラブ , 2008-03-14 0:00 セブン , 2010-07-30 0:00 トロイ , 2011-09-08 0:00 パイレーツ , 2011-12-31 04:10 ナルニア , 2011-12-31 16:00 のように登録するよう工夫をする。 でもこれはっきり言っていろいろ考えて作る必要があるので大変だとおもいます。 特に2011-9-8より後に2011年4月下旬のものが来るようにするために4月なのに12月で登録してますし。 表示する日付にできるだけ近い値で登録できるように表示順を考える必要があると思います。 私が日付の登録ルールを決めるとしたら 1.あいまいでない日付は0:00で登録(2011年4月1日->2011-04-01 00:00) 2.X月上旬はその月の最終日の1:00で登録(2011年2月上旬->2011-02-28 01:00) 3.X月中旬はその月の最終日の1:10で登録(2011年3月中旬->2011-03-31 01:10) 4.X月下旬はその月の最終日の1:20で登録(2011年4月下旬->2011-04-30 01:20) 5.X月はその月の最終日の2:00で登録(2011年2月下旬->2011-02-28 02:00) 6.春は5月31日の3:00で登録(2011年春->2011-05-31 03:00) 7.夏は8月31日の3:10で登録(2011年春->2011-08-31 03:10) 8.秋は11月30日の3:20で登録(2011年春->2011-11-30 03:20) 9.冬は次の年の2月最終日の3:30で登録(2011年冬->2012-02-29 03:30) という感じにするでしょうか(四季は区切りをどこにするかで変わるでしょうが) 日時でソートすれば 2011-01-01 2011-01-31 2011年1月上旬 2011年1月中旬 2011年1月下旬 2011年1月 ・ ・ ・ 2011-05-31 2011年5月下旬 2011年春 2011-06-01 ・ ・ というように並べ替えられます(もちろん時刻を見て出力フォーマットを選択する必要がありますが) ちょっと長々と書きすぎてわかりずらいかもしれません。 少しでも参考になればよいですが。
お礼
duron様 ご回答ありがとうございます! また、お返事遅くなりまして申し訳ありませんでした。 いただきましたご回答の考え方、非常に参考になりました!ありがとうございました! これを元に落とし込んでみたら、無事にできました。 細かなところはいまブラッシュアップしている最中ですがduron様のご助言あってこそでした。 ありがとうございました!