PHP+MySQL は今月、今週、当日のデータをカウントし、対応するフィールドをグループにソートします。

私たちの開発プロセスでは、今月、今週、または当日に従ってメンバーやマーチャントをランク付けすることがよくあります。もちろん、最初に使用されたデータを取得し、その後関数に従ってデータを処理することもできます。次に、MySQL を直接操作し、MySQL のいくつかの統計関数を使用してデータを便利にフィルタリングする方法を紹介します。

まず最初に、php を使用して、今日、今週、今月、昨日のタイムスタンプを取得する方法を紹介します。
  • 今日の開始タイムスタンプと終了タイムスタンプを取得します

	$today_start=mktime(0,0,0,date('m'),date('d'),date('Y')); 
	$today_end=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
  • 昨日の開始タイムスタンプと終了タイムスタンプを取得します

	$yesterday_start=mktime(0,0,0,date('m'),date('d')-1,date('Y')); 
	$yesterday_end=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
  • 先週の開始タイムスタンプと終了タイムスタンプを取得します

	$lastweek_start=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')); 
	$lastweek_end=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
  • 今週の開始と終了のタイムスタンプを取得します

	$thisweek_start=mktime(0,0,0,date('m'),date('d')-date('w')+1,date('Y')); 
	$thisweek_end=mktime(23,59,59,date('m'),date('d')-date('w')+7,date('Y'));
  • 今月の開始タイムスタンプと終了タイムスタンプを取得します

	$thismonth_start=mktime(0,0,0,date('m'),1,date('Y')); 
	$thismonth_end=mktime(23,59,59,date('m'),date('t'),date('Y'));
 以下は、MySQL が日、週、月のデータを取得するための基本的な操作の一部です。
  • その日のデータをクエリする

	SELECT * FROM テーブル名 WHERE TO_DAYS(時間フィールド)=TO_DAYS(NOW());
  • 昨日のデータをクエリする

	SELECT * FROM テーブル名 WHERE TO_DAYS(NOW())-TO_DAYS(時間フィールド)=1;
  • 今週のデータをクエリする

	SELECT * FROM テーブル名 WHERE YEARWEEK(DATE_FORMAT(時間フィールド,'%Y-%m-%d'))=YEARWEEK(NOW());
  • 先週のデータをクエリする

	SELECT * FROM テーブル名 WHERE YEARWEEK(DATE_FORMAT(時間フィールド,'%Y-%m-%d'))=YEARWEEK(NOW())-1;
  • 当月のデータをクエリする

	SELECT * FROM テーブル名 WHERE DATE_FORMAT(時間フィールド,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m');
  • 前月のデータをクエリする

	SELECT * FROM テーブル名 WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'),DATE_FORMAT(時間フィールド,'%Y%m'))=1;
  • その年のデータをクエリする

	SELECT * FROM テーブル名 WHERE YEAR(時刻フィールド) =YEAR(NOW());
  • 過去 7 日間のデータをクエリする

	SELECT * FROM テーブル名 WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)<=DATE(時刻フィールド);

次に、上記のクエリ操作の一部を使用して、以下の図に示す収入ランキング関数のデータを処理します。
ここに画像の説明を書きます

  • データ形式は上の図に示されており、コードは以下に直接リストされています。

switch ($style) { 

			case 'total'://总トレンド
				// $total = M('income_log')->group('userid')->sum($field); 
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM収入_log GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				壊す; 
			case 'day'://日トレンド
				$total = M('')->query("SELECT userid,SUM($field) as sum FROMcome_log where TO_DAYS(date)=TO_DAYS(NOW()) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				壊す; 
			case 'week'://周トレンド
				$total = M('')->query("SELECT userid,SUM($field) as sum FROM収入_log where YEARWEEK(DATE_FORMAT(date, 
				$total = M('')->query("SELECT userid,SUM($field) as sum FROMcome_log where DATE_FORMAT(date,'%Y%m')=DATE_FORMAT(CURDATE(),'%Y%m' ) GROUP BY userid ORDER BY SUM($field) DESC LIMIT 10"); 
				壊す; 
			デフォルト: 
				ブレーク; 
		}

以下は、処理のみが必要な取得データの結果です。ここでは、ユーザー情報の取得とランキングを容易にするために、group by を使用してデータをユーザー ID ごとにグループ化しています。

Array 
( 
    [0] => Array 
        ( 
            [userid] => 2 
            [sum] => 6.00 
        ) 

    [1] => Array 
        ( 
            [userid] => 1 
            [sum] => 6.00 
        ) 

    [2] => Array 
        ( 
            [ユーザー ID] => 3 
            [合計] => 1.00 
        ) 

    [3] => 配列
        ( 
            [ユーザー ID] => 4 
            [合計] => 0.20 
        ) 

)

再版: PHP+MySQL は今月、今週、当日のデータをカウントし、対応するフィールドをグループにソートします 

MySQL の週 (WEEK、YEARWEEK)

MySQL の週 (WEEK、YEARWEEK) - Dandelion Cloud

mysql ではデフォルトで 1 週間は日曜日から月曜日までであり、これは海外の習慣と同じですが、中国では 1 週間は月曜日から日曜日までとカウントされます。したがって、「今週のデータ」などを集計する場合には特に注意が必要です。

この点に対処するために、インターネット上の多くの記事を見てコードを書きましたが、実際、mysql が提供する WEEK および YEARWEEK 関数ではこの点が考慮されています。

WEEK関数の紹介

通常、通常の年は 365 日あり、閏年は 366 日あります。1 年は多くの週に分割でき、各週は 7 日になります。したがって、1 年は 365/7 = 52 週になることが多く、週の範囲は 1 から 52 になります。

特定の日付がどの週番号に属するかを確認するには、次のように WEEK 関数を使用します。

WEEK(日付、モード);

WEEK 関数は 2 つのパラメータを受け入れます。

  • date は週番号を取得する日付です。
  • mode は、週番号計算のロジックを決定するオプションのパラメーターです。これにより、週が月曜日から始まるか日曜日から始まるかを指定でき、返される週番号は 0 ~ 52 または 0 ~ 53 である必要があります。

mode パラメータを省略した場合、デフォルトで WEEK 関数は、default_week_format システム変数の値を使用します。

default_week_format 変数の現在の値を取得するには、次のように SHOW VARIABLES ステートメントを使用します。

  1. mysql> 'default_week_format' のような変数を表示します。
  2. +——————————-+————-+
  3. | 変数名 | 値 |
  4. +——————————-+————-+
  5. | デフォルトの週の形式 | 0 |
  6. +——————————-+————-+
  7. セット内の 1 行

私たちのサーバーでは、default_week_format のデフォルト値は 0 です。次の表は、mode パラメーターが WEEK 関数にどのような影響を与えるかを示しています。

モデル

週の最初の日

範囲

0

日曜日

0-53

1

月曜日

0-53

2

日曜日

1-53

3

月曜日

1-53

4

日曜日

0-53

5

月曜日

0-53

6

日曜日

1-53

7

月曜日

1-53

上の表の「今年は 4 日以上ある」ということは、次のことを意味します。

  • 週に 1 月 1 日が含まれ、新年に 4 日以上ある場合、その週はその年の第 1 週になります。
  • それ以外の場合、今週の番号は前年の最終週となり、次の週はその年の最初の週になります。

したがって、年を考慮する必要がある場合は、YEARWEEK 関数を使用する方が適切です。

中国の習慣に従って、月曜日を週の最初の日として数え、WEEK 関数と YEARWEEK 関数を使用して 2019-07-11 の週を取得します。

select WEEK('2019-07-11',1);

戻り値は28です

select YEARWEEK('2019-07-11',1);

戻り値は201928です

 

おすすめ

転載: blog.csdn.net/qq_32307773/article/details/125982042