sql 使用多个 table select 查询生成器 laravel 4
sql to query builder laravel 4 with multiple table select
我想在 laravel 4.2 的查询构建器中翻译这个 sql 请求,你能帮我吗?
提前致谢!
Table api_calls => 编号 | key_id |服务器 | created_at
Table api_key => 编号 |钥匙 | 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
像那样使用 join ang 聚合:
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 4.2 的查询构建器中翻译这个 sql 请求,你能帮我吗?
提前致谢!
Table api_calls => 编号 | key_id |服务器 | created_at
Table api_key => 编号 |钥匙 | 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
像那样使用 join ang 聚合:
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();