- ベストアンサー
DB内のスケジュールを表示する方法について
- DB内に登録されているスケジュールから、本日の日付よりも一番近いスケジュールを取得する方法について教えてください。
- スケジュールは日付をvarchar型で登録しており、日程は不定期に入力されます。
- また、コードの書き方も教えていただけると幸いです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DBの設計から見直す必要がありますね・・・。 まず、日付なんですから、DATE型にしないと・・・。 id|strdate|text1|text2|text3 1 | 2010-12-26 | テスト | テスト | テスト 2 | 2011-01-07 | テスト2 | テスト2 | テスト2 3 | 2011-01-13 | テスト3 | テスト3 | テスト3 4 | 2011-01-14 | テスト4 | テスト4 | テスト4 としますよ。 SELECT * FROM database WHERE strdate > now() LIMIT 0, 1; これでお望みのことができるはずです。 ちなみにvarchar で定義してしまったのはおそらく曜日とか日本語の表記にしたいからではないかと思いますが、それであれば、 SELECT DATE_FORMAT(strdate, '%Y年%m月%d日') as strdate FROM database で可能です。 文字列で比較演算子を使うのは避けたほうがいいのではないでしょうか?そもそも望みの結果が得られないと思います。試してみたこともありませんが。
その他の回答 (3)
- yuu_x
- ベストアンサー率52% (106/202)
STR_TO_DATE('2010年12月26日(日)', '%Y年%m月%d日') AS `date` date_create_from_format('Y年m月d日', '2010年12月26日(日)'); // PHP 5.3+ // PHP5.3- 抜き出すなり、置換するなり
- kosukejlampnet
- ベストアンサー率44% (126/282)
SQLで UPDATE `table` SET `date`=CONCAT(SUBSTR(`date`, 1, 4), '-', SUBSTR(`date`, 6, 2), '-', SUBSTR(`date`, 8, 2)) を実行すれば何とかなりませんか?
お礼
申し訳ありません。 データベースの更新ではなくデータベースの登録をする際になります。 自分以外のものがフォームからデータを登録しているものですから、先ほどのようにフォームにて 2010年12月29日(水) 2010年12月30日(木) 2010年12月31日(金) 2011年01月01日(土) というように表示をさせています。 この値をデータベースに登録するときに2010-12-29と登録させたいのです。
- tackn910
- ベストアンサー率0% (0/2)
select * from テーブル where 日にち>当日 order by 日にち asc limit 1
お礼
ご回答有難う御座います。 上記の内容で確認できました。 有難う御座います。 しかし、別の問題が起きてしまい、2010年12月29日(水)としていた日付を2010-12-29に戻したいのですが、調べても戻すという関数がでてこなく困っています。 $dateに2010年12月29日(水)という値が入っており、 $s_data = date('Y-m-d', strtotime($date)); としても1970年01月01日と表示されてしまいます。 $dateに入る値は2010年12月29日(水)とは限りません。 フォームから日付を選択して値を取得しています。 今回のご質問とは関係はありませんが、お分かりになりましたらご教授いただけないでしょうか? 宜しくお願いします。