I think what you need is a pivot table (aka: cross tab report):
SELECT c.id
, c.campaign_name
, count(1) as total
, SUM(if(a.status='optin',1,0)) as optin
, SUM(if(a.status='optout',1,0)) as optout
FROM addresses as a
INNER JOIN addresses_incampaign as i
o
Mysql 4
SELECT c.campaign_name, count(*), c.id FROM addresses as a INNER JOIN
addresses_incampaign as i on (a.email_address = i.email_address) INNER JOIN
campaigns as c on (i.campaign_id = c.id) WHERE a.user_id = "1" AND i.user_id
= "1" GROUP BY c.id ORDER BY c.id
This gives me
FooNmae