1

これについて検索しましたが、何も見つかりませんでした。

記事の表があります。新しい記事を書くときは、php time()関数を使用してmysqlテーブルに時間を書き込みます。

私のテーブルは

id記事の時間

時間データ型はINT(UNSIGNED)です

私の問題は、先週から今日まで、または先月から今日までの記事を表示したいということです。

私のmysqlクエリはどうあるべきですか?

通常私はこれをします

SELECT * FROM articles ORDER BY Time DESC

これにより、今日から過去までのデータが得られます。どうすればいいですか?私は解決策を思い付くことができません。php-mysqlを一緒に使用する必要がありますか、それともmysqlのみでこれを処理できますか?アイデアや例を教えていただけますか?ありがとう。

編集:

提案どおりに日時に変更しましたが、タイムゾーンに問題があると思います

今私のago()関数は2時間遅れて動作します。

<?php 
date_default_timezone_set('Europe/Istanbul'); //timezone function 
ago($time)
{
   $periods = array("saniye", "dakka", "saat", "gün", "hafta", "ay", "yıl", "baya");
   $lengths = array("60","60","24","7","4.35","12","10");

   $now = time();

       $difference     = $now - $time;
       $tense         = "önce";

   for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
       $difference /= $lengths[$j];
   }

   $difference = round($difference);

   return "$difference $periods[$j] önce ";
} //ago function 

echo $Date = ago(strtotime($data['WriteTime'])). 'önce';
?>
4

3 に答える 3

1

time列が Unix タイムスタンプであると仮定すると、次のようなことを試すことができます: (未テスト)

SELECT ... 
FROM magic
WHERE `time` BETWEEN DATE_SUB(FROM_UNIXTIME(`time`), INTERVAL 1 WEEK) AND NOW()

あなたの月には、 を使用しますINTERVAL 1 MONTH。列を一般的なデータ型に変換し、列名として予約語を使用しないでください。

于 2013-01-24T20:55:08.540 に答える
1

最初にtimeaを作成します (そして、たとえばdate type field のように意味のある別の名前を付けます)article_date

次に、次のクエリを使用します。

SELECT  * FROM    articles 
WHERE   article_date BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE()
于 2013-01-24T20:55:21.820 に答える
1

データベースのストレージに unix タイムスタンプ整数を使用するという初歩的なミスを犯しました。ほとんどの場合、日付/日時フィールド タイプを使用する必要があります。これは、これらのフィールドに対して常にクエリを実行する必要があるためです。これは、UNIX タイムスタンプを使用しない場合にはるかに簡単です。

したがって、フィールドを日時に変換し、MySQL を使用NOW()して、行を追加するときに現在のタイムスタンプをフィールドに挿入します。

次に、MySQL のデータ/時間関数を調べて、このフィールドに対してクエリを実行してください。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

于 2013-01-24T20:57:07.143 に答える