Чтобы получить первое правило, которое не применяется, вы можете использовать
SELECT r.*
FROM rules r
LEFT JOIN applied a ON (a.rule_id = r.id)
WHERE a.rule_id IS NULL
ORDER BY r.id
LIMIT 1
Затем вы выполняете действие, связанное с правилом, и вставляете новую запись в таблицу applied
.