【问题标题】:sql to query builder laravel 4 with multiple table select使用多表选择查询构建器laravel 4的sql
【发布时间】:2016-09-16 13:21:12
【问题描述】:

我想在 laravel 4.2 的查询生成器中翻译这个 sql 请求,你能帮我吗?

提前致谢!

表 api_calls => id | key_id |服务器 | created_at

表 api_key => id |关键 | created_at

SQL:

SELECT K.key FROM api_key as K

WHERE
(SELECT count(id) FROM api_calls WHERE server = $server AND key_id = K.id AND created_at >= $DateSeconds) < 10

AND 
(SELECT count(id) FROM api_calls WHERE server = $server AND key_id = K.id AND created_at >= $DateMinutes) < 500

GROUP BY K.key

【问题讨论】:

    标签: laravel-4 query-builder


    【解决方案1】:

    像这样使用连接和聚合:

    DB::table('api_key as K')
        ->select('K.*')
        ->join('api_calls as ac1', function ($join) use ($server, $DateSeconds) {
            $join->on('ac1.server', '=', DB::raw($server));
            $join->on('ac1.key_id', '=', 'K.id');
            $join->on('ac1.created_at', '>=', DB::raw($DateSeconds));
         })
         ->join('api_calls as ac2', function ($join) use ($server, $DateMinutes) {
            $join->on('ac2.server', '=', DB::raw($server));
            $join->on('ac2.key_id', '=', 'K.id');
            $join->on('ac2.created_at', '>=', DB::raw($DateMinutes));
         })
         ->having(DB::raw('COUNT(ac1.id)'), '<', 10)
         ->having(DB::raw('COUNT(ac2.id)'), '<', 500)
         ->groupBy('K.id')
         ->get();
    

    【讨论】:

    • 谢谢,明天我会测试一下,祝你有美好的一天:)
    • 您好,谢谢您的请求,但是当我转储结果时,我什么也得不到。甚至没有任何错误。有什么想法吗?
    • 我认为这个查询应该可以工作。如果您一无所获,则意味着所有记录都已被过滤掉。如果你有 Laravel 的 Debugbar,你可以检查结果查询是什么。您也可以尝试使用leftJoin()(左外连接)而不是join(内连接)来检查这个 - 只是检查是否有任何结果。
    猜你喜欢
    • 2018-07-17
    • 2017-06-29
    • 1970-01-01
    • 2012-10-24
    • 2017-10-05
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多