Я думаю, что этот запрос, вероятно, то, что вы хотите. Он находит все действия, связанные с данным правилом, затем присоединяется к пользователям, участвующим в этом действии, которые не завершили его (я полагаю, что это означает, что оценка <10 указывает?) </p>
SELECT r.id, u.id, COUNT(a.id)
FROM rule r
JOIN activity a ON a.rule_id = r.id
JOIN user_activity ua ON ua.activity_id = a.id AND ua.score < 10
JOIN user u ON u.id = ua.user_id
GROUP BY r.id, u.id
Очевидно, что вы можете расширить SELECT
, включив в него такие вещи, как описание правила, имя пользователя и т. Д.
Я не мог видеть никаких признаков того, что означает «выполнение выполнено», поэтому я предположил, что счет меньше 10. Если это не так, вам нужно соответствующим образом изменить соединение на user_activity
.