• ベストアンサー

MySQLにおける条件/公開日を指定するには

お世話になります。データベースからの呼び出しに関して質問があります。 hogeというテーブルにid(int),date(date),title(smalltext),comment(longtext)の構成で SELECT * FROM hoge ORDER BY date DESC LIMIT 5 日付順に5件までのレコードを表示しておりますが、dateに未来の日付を入力しその日付になったらレコード公開する場合どのようにしたらいいのでしょうか。(よくブログなどでエントリの投稿日付を指定できるような感じです) 例として日記をWEBで公開しおりその日付(date)になったらあらかじめインサートしておいたレコードがWEB上で先頭に公開されるということです。 whereで条件を指定するのだと思いましたが、Syntaxエラーが出るだけでもう何がなにやらです…。一時的に未来の日付のものをサスペンドというかロックをかけるという手段も探して見たのですがお手上げとなってしまいましたのでなにとぞご教授よろしくお願いいたします。 環境(ローカルテスト環境) MYSQL 5.027 ただしリモート上のSQLが4.1.21となっております。 ややこしくてすいません。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちわ 取り合えず、参考意見として、、、 SELECT * FROM hoge X WHERE X.date < [外部から入力した日付] ORDER BY X.date DESC LIMIT 5 ; 私の端末に環境がないので試してもいないのですが 上記の SQLの様なかんじでしょうか? 最初、nitchsatchさんの質問、テーブル構造を見たとき 条件式に含もうとしているフィールドに dateフィールドがありました。 そのまま使用すると、もしかして、、、 1. データ型dateを記述しているのだと MySQLに誤読されるためエラー 2. 関数dateと誤解されてエラー(そんな関数があるかも分かりませんが、、(汗) 上記のような現象になると考えたので テーブル名やテーブル別名を使用してフィールド名と明記すれば大丈夫かなぁ、、、と 、、、無知な回答で失礼します。

nitchsatch
質問者

お礼

ご回答ありがとうございます。 アドバイスどおり SELECT * FROM tbl1 where hiduke <= DATE_FORMAT(now(),'%Y-%m-%d') ORDER BY hiduke DESC としフィールド名を変更しましたら無事希望どおりの結果と なりました。基本的なことを忘れていました。大変ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

SELECT * FROM `hoge` WHERE `date` >=CURDATE() ORDER BY `date` DESC LIMIT 5 としてみてはいかがでしょう?

nitchsatch
質問者

お礼

ご指摘のとおりフィールド名に問題があり フィールド名変更で確認。その後元に戻し クォーテーションでくくってみて同結果になり 無事解決いたしました。大変ありがとうございました。 基本は大事だということを痛感いたしました。

すると、全ての回答が全文表示されます。

関連するQ&A