電子書籍の厳選無料作品が豊富!

お世話になります。データベースからの呼び出しに関して質問があります。
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となっております。
ややこしくてすいません。よろしくお願いします。

A 回答 (2件)

こんにちわ


取り合えず、参考意見として、、、

SELECT
*
FROM
hoge X
WHERE
X.date < [外部から入力した日付]
ORDER BY
X.date DESC
LIMIT 5
;

私の端末に環境がないので試してもいないのですが
上記の SQLの様なかんじでしょうか?

最初、nitchsatchさんの質問、テーブル構造を見たとき
条件式に含もうとしているフィールドに dateフィールドがありました。
そのまま使用すると、もしかして、、、
1. データ型dateを記述しているのだと MySQLに誤読されるためエラー
2. 関数dateと誤解されてエラー(そんな関数があるかも分かりませんが、、(汗)
上記のような現象になると考えたので
テーブル名やテーブル別名を使用してフィールド名と明記すれば大丈夫かなぁ、、、と


、、、無知な回答で失礼します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 19:06

SELECT *


FROM `hoge`
WHERE `date` >=CURDATE()
ORDER BY `date` DESC
LIMIT 5

としてみてはいかがでしょう?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 19:10

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