これは非常に簡単だと思いますが、理解できません。私は、今日、今週、今月の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"
どんなアイデアでも大歓迎です。ありがとう!
日付列が実際の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;
日時関数(MONTH()、YEAR()、DAY()、 MySQL Manual )を使用してみてください
今週:
SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW());
先週:
SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1;
今月:
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());
これにより、現在の月、本当に週、そして今日だけが選択されます:-)
Nathanの答えは、今日、今週、今月のジョークではなく、過去24時間、168時間、744時間のジョークを提供します。それがあなたが望むものであれば、素晴らしいですが、私はあなたが別のものを探しているかもしれないと思います。
彼のコードを正午に使用すると、ジョークは昨日正午に始まり、今日正午に終了します。今日のジョークが本当に必要な場合は、次を試してください。
SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC;
あなたは現在の週、月などとは少し違うことをしなければなりませんが、あなたはそのアイデアを得ます。
誰もが日付が表の列であることに言及しているようです。
これは良い習慣だとは思いません。 Wordの日付は、一部のコーディング言語(Oracleなど)のキーワードにすぎない可能性があるため、列名の日付をJDateに変更してください。
次のように動作します:
SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC;
したがって、JScore列とJDate列を持つJokesというテーブルがあります。
「今日」のより良い解決策は次のとおりです。
SELECT * FROM jokes WHERE DATE(date) = DATE(NOW())
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;
さて、このソリューションは、現在の月、今週、今日のみを選択するのに役立ちます
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レコードセットの使用は空のトランザクションです。
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();
}
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());