よろしくお願いいたします。
商品のデータベースサイトを運営しております。
発売日ごとに商品を並ばせているページがあります。
過去に発売したもの、発売日が決定しているものについては、
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
で出しています。
曖昧な表現や、ここがわからない、などあればご指摘ください。
よろしくお願いいたします。
No.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様のご助言あってこそでした。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(車) 古い普通乗用車の更新終了しているナビを何とか使える方法はないものでしょうか? 5 2023/02/18 23:05
- テレビ 家電量販店の無料保証3年と5年の違い(液晶テレビ)はどういう基準で決まるのですか? 8 2023/08/06 08:22
- 兄弟・姉妹 2011年3月から一人暮らしをするため、マンションに引っ越しました。 それで使わなくなった ゲームボ 2 2023/02/21 00:00
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- 英語 技術論文の引用文献の英語表記法 3 2022/11/16 09:52
- 野球 北海道日本ハムファイターズの話 1 2022/12/22 00:16
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- お酒・アルコール キリン秋味について 1 2023/08/22 18:11
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
SQL 重複しないJoinの仕方を教...
-
複数のテーブルから値を合計出...
-
mysqlコマンドとPHPで同じSQLの...
-
SQLローダーCSV取込で、囲み文...
-
単一グループのグループ関数で...
-
count関数の値をwhere句で使用...
-
AccessのSQL文で1件のみヒット...
-
select文の実行結果に空白行を...
-
Oracleで「文字が無効です」の...
-
SELECT FOR UPDATE で該当レコ...
-
大量レコードをTRUNCATEせずに...
-
【PL/SQL】FROM区に変数を使う方法
-
レコードの登録順がおかしい
-
テーブルの最後(最新)のレコー...
-
SELECTした合計値をそのまま割...
-
where句中のtrim関数について
-
2つの列が同じ値の行を取得するSQL
-
int型フィールドにnullを登録で...
-
1の行を固定した上でVBAを用い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
複数のテーブルから値を合計出...
-
mysqlでunixtimeによる日付範囲...
-
SQL 重複しないJoinの仕方を教...
-
最新の日付と2番目の日付のデー...
-
DISTINCTROWについてです。
-
日付検索で0001-01-01 00:00:00...
-
MySQLで日付(date)型のdefaul...
-
MySQLで特定のグループの上位3...
-
mysqlコマンドとPHPで同じSQLの...
-
MySQLのdatetime型に0月0日を格納
-
SQLで、同じ値が何回連続す...
-
EXCEL 日付範囲内の日数カウン...
-
Mysqlで最新の日付を持つデータ...
-
サブクエリを使わない方法
-
mysqlに格納されている日付のデ...
-
先期末日の日付を求めるSQL
-
mysqlのif文かcase文で複数条件...
-
直近1ヶ月に誕生日を迎える社員...
-
MySQL「 INT」「 DATETIME」違い
おすすめ情報