0

我只是有点不确定我如何处理这个问题。这是我必须输出的信息:

输出

最好的方法是什么?我有一个名为“payments”的表和一个名为“referral_earnings”的表(示例)。

付款:
user_id | type (file or link) | amount | created_at (DATETIME)

推荐收入:
user_id (user receiving the payment) | amount | created_at

我会将查询结果缓存 X 分钟。我只是不确定创建查询的最佳方法是什么?我正在努力的部分是不同的时间框架。

谢谢!

编辑:好的,我现在遇到的问题是在同一个查询中区分文件、链接和引用

答案: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');

这可能是您可以执行此操作的方法之一,但您始终可以根据自己的舒适度自定义上述代码。

于 2013-08-23T07:16:40.280 回答
0

编写一个查询(存储过程 - 假设您与 mysql 配对)并在每次需要从这些表中获取数据时调用该查询(存储过程)。将您的日期时间作为参数传递给存储的过程。根据您的需要,您甚至可以在您使用的任何数据库中使用内置的“getDateTime”函数,以避免传递日期时间。

我只是重新阅读了原始帖子-您实际上也会为其他变量(用户ID)传递参数。

于 2013-08-21T16:10:46.737 回答
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 回答