Looks good, that will get any orders made in the 3 days leading up to the event but it will catch any orders made after the event, not sure if that can happen but...if you want to be extra OCD... You can add in an condition that checks if the order wasn't "after" the event date by adding:
select sum(quantity) from orders where (date_purchase >= DATE(event_date - INTERVAL 3 DAY) and date_purchase <= event_date);
Adding that ensures it was purchased within 3 days of the event or the event date itself, but not after.
Are date_purchase and event_date strictly date fields or do they have time components as well? If you have time components, the "date_purchase <= event_date" part may not work without additional tweaking.
the date_purchase does have a time element; so i'd have to do
select sum(quantity) from orders where (DATE_FORMAT(date_purchase, '%Y-%m-%d') >= DATE(event_date - INTERVAL 3 DAY) and DATE_FORMAT(date_purchase, '%Y-%m-%d') <= event_date);
does that look correct? i've just tested that and it works well. comparing it to the query without the DATE_FORMAT there is a 10% discrepancy in results. with this more exact result returning 10% more records.