web-dev-qa-db-ja.com

今日、今週、今月のレコードを選択php mysql

これは非常に簡単だと思いますが、理解できません。私は、今日、今週、今月のmysql dbのテーブルから選択した結果を含むページをいくつか作成しようとしています。 date('Y-m-d H:i:s');を使用してレコードが作成されると、日付が入力されます。ここに私が持っているものがあります:

日付>(日付-(60 * 60 * 24))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC"

週> date>(date-(60 * 60 * 24 * 7))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC"

月(30日)ここで、日付>(日付-(60 * 60 * 24 * 30))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC"

どんなアイデアでも大歓迎です。ありがとう!

65

日付列が実際のMySQL日付列であると仮定します。

SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC;        
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC;
119
Nathan Ostgard

日時関数(MONTH()、YEAR()、DAY()、 MySQL Manual )を使用してみてください

今週:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW());

先週:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1;
71
mo.

今月:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW());

今週:

SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW());

当日:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW());

これにより、現在の月、本当に週、そして今日だけが選択されます:-)

37
Lukas Brzak

Nathanの答えは、今日、今週、今月のジョークではなく、過去24時間、168時間、744時間のジョークを提供します。それがあなたが望むものであれば、素晴らしいですが、私はあなたが別のものを探しているかもしれないと思います。

彼のコードを正午に使用すると、ジョークは昨日正午に始まり、今日正午に終了します。今日のジョークが本当に必要な場合は、次を試してください。

SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC;  

あなたは現在の週、月などとは少し違うことをしなければなりませんが、あなたはそのアイデアを得ます。

9
David van Geest

誰もが日付が表の列であることに言及しているようです。
これは良い習慣だとは思いません。 Wordの日付は、一部のコーディング言語(Oracleなど)のキーワードにすぎない可能性があるため、列名の日付をJDateに変更してください。
次のように動作します:

SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC;

したがって、JScore列とJDate列を持つJokesというテーブルがあります。

4
KarlosFontana

「今日」のより良い解決策は次のとおりです。

SELECT * FROM jokes WHERE DATE(date) = DATE(NOW())
3
JoeGalind

Nathanの答えは非常に近いですが、フローティング結果セットを返します。時間のシフトに伴い、レコードは結果セットの外に浮かび上がります。 DATE()NOW()関数を使用すると、日付から時間要素が削除され、静的な結果セットが作成されます。 date()などの関数を日付列に適用するとMySqlが使用できないため、now()関数は実際のdate列ではなくdate()に適用されるため、列のパフォーマンスは高くなります。インデックス。

結果セットを静的に使用するには:

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) 
ORDER BY score DESC;
2
Kevin Bowersox

さて、このソリューションは、現在の月、今週、今日のみを選択するのに役立ちます

SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC;

毎週追加される投稿の場合:

WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW())

毎月追加される投稿の場合:

MONTH(addedon_gm) = MONTH(NOW())

毎年追加される投稿の場合:

YEAR(addedon_gm) = YEAR(NOW())

今日追加されたゲームのみを表示する正確な結果が得られます。それ以外の場合は、「今日は新しいゲームが見つかりません」と表示されます。 ShowIFレコードセットの使用は空のトランザクションです。

0
Al3abMizo Games

NOW()関数を使用することは、時間差を得るために間違っていると思います。なぜなら、過去24時間を計算するたびにNOW()関数によって。代わりにCURDATE()を使用する必要があります。

    function your_function($time, $your_date) {
    if ($time == 'today') {
        $timeSQL = ' Date($your_date)= CURDATE()';
    }
    if ($time == 'week') {
        $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())';
    }
    if ($time == 'month') {
        $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())';
    }

    $Sql = "SELECT * FROM jokes WHERE ".$timeSQL
    return $Result = $this->db->query($Sql)->result_array();
}
0
ganji

MySQLで先週のデータを取得します。これは、年間の境界を越えて私にとっても有効です。

select * from orders_order where YEARWEEK(my_date_field)= YEARWEEK(DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK));

現在の週のデータを取得するには

select * from orders_order where YEARWEEK(date_sold)= YEARWEEK(CURRENT_DATE());
0
Sharad