プロが教えるわが家の防犯対策術!

よろしくお願いいたします。
商品のデータベースサイトを運営しております。
発売日ごとに商品を並ばせているページがあります。

過去に発売したもの、発売日が決定しているものについては、
date型に日付を入れてDBに登録しているのですが、
発売日が若干曖昧なもの、(2011年夏、や2011年4月下旬など)の商品も今後登録し、
可能ならば意味合い的に並ばせればいいなあと思っています。
こういうことは、mysqlかphpをどういじれば実現できるのでしょうか?
下記に具体的なイメージを載せます。
もしお分かりになる方がいらっしゃいましたら、よろしくお願いいたします。


テーブル
title , hatsubai
セブン , 2010-7-30
タイタニック , 2005-2-5
パイレーツ , 2011年4月下旬
ファイトクラブ , 2008-3-14
トロイ , 2011-9-8
ナルニア , 2011年冬


吐き出したい並び(上と一緒)
タイタニック , 2005-2-5
ファイトクラブ , 2008-3-14
セブン , 2010-7-30
トロイ , 2011-9-8
パイレーツ , 2011年4月下旬
ナルニア , 2011年冬


※自分が作っているテーブルはもうちょっと複雑なので、
新しいカラムを追加してそこにidをつけて並ばせる、というのではなく、あくまで日付で並ばせたいです。


いま吐き出しているphpは、
while ($row = mysql_fetch_array
で出しています。

曖昧な表現や、ここがわからない、などあればご指摘ください。
よろしくお願いいたします。

A 回答 (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


というように並べ替えられます(もちろん時刻を見て出力フォーマットを選択する必要がありますが)

ちょっと長々と書きすぎてわかりずらいかもしれません。
少しでも参考になればよいですが。
    • good
    • 0
この回答へのお礼

duron様


ご回答ありがとうございます!
また、お返事遅くなりまして申し訳ありませんでした。
いただきましたご回答の考え方、非常に参考になりました!ありがとうございました!
これを元に落とし込んでみたら、無事にできました。
細かなところはいまブラッシュアップしている最中ですがduron様のご助言あってこそでした。
ありがとうございました!

お礼日時:2011/04/04 16:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!