У меня есть база данных со следующими отношениями:
Есть projects
- то, что люди могут приобрести, также имеет user_id
,
Есть backers
- люди, которые покупают,
Есть orders
- каждый заказ представляет собой покупку Project
на Backer
(Backer
можно приобрести только Project
только один раз). Это сумма, показывающая, сколько Backer
заплатил за покупку Project
Мне нужно написать следующий запрос - учитывая, что $user_id
, $count
и $sum
находят всех спонсоров, которые вложили по крайней мере в $count
количество проектов с user_id
, равным $user_id
и сумма их покупок для этих проектов выше $sum
.
Backer::whereHas('projects', function ($q) use ($sum, $userId){
$q->where('user_id', $userId);
}, '>=', $leastProjectCount)->get();
но это не ограничивает $sum
покупок
Обновление:
Итак, я пришел с этим запросом:
select * from `backers` \r\n
WHERE id > 0 \r\n
AND (select count(*)\r\n
FROM `projects` \r\n
inner join `orders` on `projects`.`id` = `orders`.`project_id` \r\n
where `backers`.`id` = `orders`.`backer_id` \r\n
and `user_id` = 6 \r\n
and exists (\r\n
select * \r\n
from `tags` \r\n
inner join `project_tag` on `tags`.`id` = `project_tag`.`tag_id` \r\n
where `projects`.`id` = `project_tag`.`project_id` \r\n
and `id` in (27)\r\n
) \r\n
) >= 1 \r\n
AND (select sum(orders.amount)\r\n
FROM `projects` \r\n
inner join `orders` on `projects`.`id` = `orders`.`project_id` \r\n
where `backers`.`id` = `orders`.`backer_id` \r\n
and `user_id` = 6 \r\n
and exists (\r\n
select * \r\n
from `tags` \r\n
inner join `project_tag` on `tags`.`id` = `project_tag`.`tag_id` \r\n
where `projects`.`id` = `project_tag`.`project_id` \r\n
and `id` in (27)\r\n
) \r\n
) >= 12
обратите внимание, что подзапросы почти одинаковы, за исключением того, что первый использует COunt(*)
, а второй - sum(orders.amount)
. Также обратите внимание, что этот запрос выполняется, если были заданы все параметры, но он может быть короче, если не заданы некоторые параметры. Проблема, которую я получаю, состоит в том, что у меня нет нумерации страниц с таким запросом.