2012-02-07 13 views
1

私のデータベースにはUNIXタイムスタンプがあります。今私は2ヶ月前の結果しか得ません。2か月以上経過したデータベースからのエントリのみを表示

2か月以上経過したエントリが表示されるため、これは機能しません。

$unixbefore2months = strtotime('-2 month'); 
$query = 'SELECT * FROM table WHERE time > "'.$unixbefore2months.'"'; 

だから私は自分の作成時間を2ヶ月前に時間を決定したタイムスタンプ(今から)とデータベース内のエントリを持っています。

答えて

3

使用UNIX_TIMESTAMP()それらを変換するために、あなたはネイティブのMySQL DATE_SUB()機能を使用する場合には、任意のPHP変数なしで行うことができます。

SELECT * FROM tbl WHERE time > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 MONTH)); 

UNIX_TIMESTAMP()DATE_SUB()の詳細についてはMySQL date & time functionsリファレンスを参照してください。

1

のデバッグを学ぶ時間です。

この種の質問は非常に役に立たないことです。
実際にお手伝いできるのは自分だけです。

だから、あなたはいくつかのトリックを学ばなければならない。

  1. 常に変数を確認してください。
    unixbefore2monthsには何が含まれていますか?あなたは考えなければなりません。それを確認してください:echo date("Y-m-d",unixbefore2months);
    $ queryには何が含まれていますか?あなたは考えなければなりません。それを確認してください:echo $query;コンソールでこのクエリを実行してください。
  2. データを確認してください。
    フィールドタイプとは何ですか? desc tableのクエリは何を表していますか?
    テーブルにタイムスタンプがありますか?
    何ですか?

見て、誰もこれらの質問に答えることはできません。しかし、あなたは問題を簡単に見つけることができます。

+0

'echo $ unixbefore2months;'は1323272062です。 'echo date(" Y-m-d "、$ unixbefore2months);'は2011-12-07を与えます。 'echo $ query;' SELECT * FROM tbl WHERE time> 1323272062'を返します。時間はvarchar(50)で、 '1302689069'のような文字列が含まれています。 '$ query'を除いてすべてを検証しました。私は文字列を比較するときに私が間違っていると思った...しかし、今はうまくいくようです。私が何を変えたか分からない。 – testing

+1

まあ、それも起こる。とにかく、UNIXのタイムスタンプをvarcharではなくINTフィールドに格納する必要があります。 –

+0

違いを説明できますか? INTはなぜより良いのですか?より多くの値を格納できるからですか? – testing

関連する問題