SobesLab логотип SobesLab

Ответ

Необходимо для каждого пользователя сравнить набор купленных товаров категории с полным списком товаров этой категории. Один из вариантов – сгруппировать покупки по пользователю и проверить, что COUNT(DISTINCT product_id) в этой категории равен общему количеству товаров в категории (подзапросом или заранее известному числу). На SQL: SELECT user_id FROM Purchases p JOIN Products pr ON p.product_id=pr.id WHERE pr.category = :cat GROUP BY user_id HAVING COUNT(DISTINCT p.product_id) = (SELECT COUNT(*) FROM Products WHERE category = :cat). У пользователей, удовлетворяющих этому условию, куплены все позиции категории.