0

私はこれにどのようにアプローチするかについて少し確信が持てません。これは私が出力しなければならない情報です:

出力

それを行う最良の方法は何ですか?「payments」というテーブルと「referral_earnings」というテーブルがあります(例)。

支払い:
user_id | type (file or link) | amount | created_at (DATETIME)

紹介収益:
user_id (user receiving the payment) | amount | created_at

クエリの結果を X 分間キャッシュします。これを行うためのクエリを作成する最良の方法がわかりませんか? 私が苦労している部分は、さまざまな時間枠です。

ありがとう!

EDIT:私が今抱えている問題は、同じクエリ内のファイル、リンク、および参照を区別することです

回答: https://stackoverflow.com/a/18362989/1073419

4

4 に答える 4

2

クエリ スコープを使用します。彼らは非常に便利です

class Stats extends Eloquent{

      public function scopefileStats($query, $timeFrame){
            $query->where('user_id', = ,Auth::user()->id);
            $query->where('created_at','>', DB::raw($timeFrame));
            $query->where('type','=','FILE');
      }

      public function scopelinkStats($query,$timeFrame){
            $query->where('user_id', = ,Auth::user()->id);
            $query->where('created_at','>', DB::raw($timeFrame));
            $query->where('type','=','LINK');
      }

      public function scopereferralStats($query,$timeFrame){
            $query->where('user_id', = ,Auth::user()->id);
            $query->where('created_at','>', DB::raw($timeFrame));
            $query->where('type','=','REFERRAL');
      }
}

データを次のように取得します

Stats::fileStats('date_sub(NOW(), INTERVAL 1 MONTH)')->sum('amount');
Stats::linkStats('date_sub(NOW(), INTERVAL 1 MONTH)')->sum('amount');
Stats::referralStats('date_sub(NOW(), INTERVAL 1 MONTH)')->sum('amount');

これはおそらくこれを行う方法の 1 つですが、上記のコードは快適な要素に合わせていつでもカスタマイズできます。

于 2013-08-23T07:16:40.280 に答える
0

おそらくMysqlの日付/時刻関数を利用するかもしれませんが、

created_at > date_sub(NOW(), INTERVAL 1 MONTH) // for last month
created_at> date_sub(NOW(), INTERVAL 7 DAY) // for last week
created_at> date_sub(NOW(),INTERVAL 1 DAY) // for yesterday
于 2013-08-21T16:08:55.093 に答える
0

これを行う:

DB::select("
    SELECT
        SUM(IF(TYPE = 'file', conversions.user_payout, 0)) AS files,
        SUM(IF(TYPE = 'link', conversions.user_payout, 0)) AS links,
        (SELECT 
            SUM(amount) FROM referral_earnings WHERE user_id = :user_id1 AND date_sub(NOW(), INTERVAL 7 DAY)
        ) AS referrals 
    FROM 
        conversions
    WHERE 
        conversions.user_id = :user_id2 
        AND date_sub(NOW(), INTERVAL 7 DAY)
", [
    'user_id1' => 3, 
    'user_id2' => 3
]);

おかげで:
https://stackoverflow.com/a/18362519/1073419
https://stackoverflow.com/a/14906832/1073419

すべての助けに感謝します!

于 2013-08-21T16:32:43.987 に答える
0

クエリ (ストアド プロシージャ - mysql とペアになっていると仮定) を作成し、それらのテーブルからデータを取得する必要があるたびにそのクエリ (ストアド プロシージャ) を呼び出します。日時をパラメータとしてストアド プロシージャに渡します。必要に応じて、使用しているデータベースで組み込みの「getDateTime」関数を使用して、日時を渡す必要がないようにすることもできます。

元の投稿を読み直しました。実際には、他の変数 (ユーザー ID) のパラメーターも渡します。

于 2013-08-21T16:10:46.737 に答える