2017-11-27 8 views
0

私は助けが必要です。 PHPとMySQLを使用して日付ごとに今日を含む最後の7日間のレコードをエッチングする必要があります。私は下の表を説明しています。PHPとMySQLを使用して日付ごとにテーブルから過去7日間のレコードを取得する方法

db_special:ここ

id    date          name 

1  11/27/2017 11:14:48 AM        Raj 

2  10/26/2017 12:11:30 PM        Rahul 

私はdateフィールド値に従ってデータをフェッチする必要があります。 Dateフィールドフォーマットはmm/dd/yyyyで、私の要件は、PHPとMySQLを使用してtodayを含む過去7日間のテーブルからすべてのデータを取得することです。助けてください。

+0

ギあなたが7日で何を理解していますか? 7×24時間または厳密に日付マイナス7?それを知ることは、夏/冬と閏秒に対処するのに役立ちます。 – Zim84

+0

それは7 * 24時間でなければなりません。 – subhra

答えて

3

MySQLを非ISO形式のmm/dd/yyyyのテキストとして保存しています。したがって、MySQLが提供する日付機能のいずれかにアクセスするためには、これまでの変換を行う必要があります。 STR_TO_DATEの機能が便利です。

SELECT 
    id, date, name 
FROM yourTable 
WHERE 
    STR_TO_DATE(col, '%m/%d/%Y') > DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND 
    STR_TO_DATE(col, '%m/%d/%Y') <= CURDATE(); 

将来のレコードがないと思われる場合は、2番目の不等号は省略できます。

dateカラムで日付を変更する予定がある場合は、このカラムをテキストではなく正真正銘の日付タイプにすることを検討してください。

注:実際には日付文字列にも時間コンポーネントが含まれているようです。 this demo showsのように、このようなタイムスタンプでフォーマットマスク%m/%d/%Yを使用すると、タイムコンポーネントが完全に削除され、日付のみが残されます。

+0

はい、うまく動作します。私はそれをテストしました。 – subhra

0

このため、MySQLのクエリは、あなたの「日付」列が文字列の場合、このようになります:

select * 
from db_special 
where STR_TO_DATE(`date`, '%m/%d/%Y') >=date_sub(curdate(),INTERVAL 6 DAY) 
    and STR_TO_DATE(`date`, '%m/%d/%Y') < date_add(curdate(),INTERVAL 1 DAY) 

適切な日付として保存されている場合、あなたは(str_to_dateを必要としない)

select * 
from db_special 
where date >=date_sub(curdate(),INTERVAL 6 DAY) 
    and date < date_add(curdate(),INTERVAL 1 DAY) 

注意curdate()は今日の日付を00:00:00(今日の開始日)に返します。今日のすべてのデータを含めるには、現在の日付に1日を追加する必要があります。

+0

私はあなたのクエリを実行し、データはありません。私は日付が '11/27/2017 11:14:48 AM 'のレコードが1つあります。 – subhra

+0

は、あなたの 'date'カラムは本当に日付か日時として格納されていますか、それとも文字列(char/varchar)ですか? –

+0

あなたは実際に日付を文字列として保存すべきではありません。とても悪い考えです。クエリの処理速度が低下するだけでなく、変換エラーも発生します。 –

0

は、この方法を試してください。

select * from db_special 
where date between date_sub(now(),INTERVAL 1 WEEK) and now(); 

あなたは(任意の)ご指定されているようcurrent_dateを使用することができます

SELECT * FROM db_special WHERE WEEK (date) = WEEK(current_date) - 1 AND YEAR(date) = YEAR(current_date); 
+0

OPは日付を非ISO形式のテキスト、q.v.として保存したため、これは機能しません。他の答え。 –

関連する問題