4

私のMySQLデータベースには、すべて日付を持つイベントがあります。将来のすべてのイベントを取得するために SQL クエリを実行すると、エラーが発生します... ただし、イベントの日付は未来です。過去の日付を選択するように SQL 要求を変更すると、将来の日付が取得されます...
以下の SQL ステートメントは以前は機能していましたが、何らかの理由で機能しなくなりました...

私はこのSQLリクエストを使用します:

$sql = "SELECT * FROM calendar WHERE date >= CURDATE() order by `date`";

結果として空の配列を取得します...
ただし、クエリをこれに変更すると、データベース内のすべてのイベントが取得されます。

$sql = "SELECT * FROM calendar WHERE date <= CURDATE() order by `date`";

これは私のデータベース データです。私の意見では、すべてのデータは未来のものです... ここに画像の説明を入力

テーブルの形式dateは、デフォルトの日付型です。
ここに画像の説明を入力

echo date("Y-m-d");サーバーに結果として今日の日付を取得 する時間を尋ねると...

では、どこを間違えるのでしょうか?

4

6 に答える 6

2

間違った日付フィールドをチェックしている可能性があります。作成日と予定日はありますか?

私は今飲んでいる風邪薬に夢中かもしれませんが、あなたの日付テーブルはおそらくあなたのカレンダーアイテムの日付ではありえません。提出されたIDはint(2)だけで、ちょっと小さいようです。

于 2012-06-26T12:59:11.153 に答える
2

多分もっと簡単なもの?テーブルの列名が であることに気付きましたdate。これは、datetime 値の日付部分を返す関数 date() の名前でもあります。そうだとすれば

$sql = "SELECT * FROM calendar c WHERE c.`date` <= CURDATE() order by `date`";

トリックを行うでしょう。mysql 自体でなくても、使用している GUI アプリ (私には phpmyadmin のように見えます) が混乱する可能性があります。

date(ところで、あなたは order by 句での終了ティックを忘れました)

于 2012-06-26T13:03:42.190 に答える
1

空のセットを取得することは、一致するものがないことを意味します。私はあなたの日付のフォーマットを見ていきます。私が考えていた唯一の他のことは、一致しない型を比較しているため、空のセットを返すだけだということです。

于 2012-06-26T12:51:18.737 に答える
1

DATEDIFF を使用します。

日付差分

WHERE DATEDIFF(日付, CURDATE) > 0

于 2012-06-26T12:56:57.500 に答える
0

方法や理由は聞かないでください。テーブルを切り捨ててデータを再挿入しましたが、クエリは問題なく動作しているようです。

$sql = "SELECT * FROM `calendar` WHERE `date` >= CURDATE() order by `date`";

だから、私のテーブルを切り捨てることで問題が解決されるように見えるという事実にもかかわらず、私はその理由の質問に対する答えを知りたいです...誰でも私にそれを提供できますか?

于 2012-06-27T08:12:00.490 に答える
0

クエリを作成する前に、これを実行します。

SET time_zone = '-2:00'; // or whatever your time zone is.
于 2012-06-26T12:50:46.663 に答える