Ok, it seems we have found a solution::
INSERT
INSERT INTO table1 (field1, field2, ..., fieldN, flag_direct_reservation)
SELECT @field1, @field2, ..., @fieldN, ,CASE WHEN (SELECT COUNT(*) FROM sometable WHERE course=@course_id) > @max_part THEN 1 ELSE 0 END
UPDATE
(only for determining the subscription status, in case of subscription deletion)
UPDATE corsi_mytable p1 INNER JOIN
(
SELECT COUNT(*) as actual_subscritions
FROM mytable
WHERE course=@course_id
)p2
SET p1.flag_direct_reservation= CASE WHEN p2.actual_subscritions > @max_part THEN 0 ELSE 1 END
WHERE p1.id =@first_waiting_id;