Multiple joins in a MySQL query giving incorrect results
===

I've got a large mysql query with 5 joins which may not seem efficient but I'm struggling to find a different solution which would work.

The views table is the main table here, because both clicks and conversions table rely on it via the token column(which is indexed and set as a foreign key in all tables).

The query:

    SELECT 
    var.id,
    var.disabled,
    var.name,
    var.updated,
    var.cid,
    var.outdated,
    IF(var.type <> 0,'DL','LP') AS `type`,
    COUNT(DISTINCT v.id) AS `views`, 
    COUNT(DISTINCT c.id) AS `clicks`,
    COUNT(DISTINCT co.id) AS `conversions`,
    SUM(tc.cost) AS `cost`,
    SUM(cp.value) AS `revenue`
    
    FROM variants AS var
    
    LEFT JOIN views AS v ON v.vid = var.id
    LEFT JOIN traffic_cost AS tc ON tc.id = v.source
    LEFT JOIN clicks AS c ON c.token = v.token
    LEFT JOIN conversions AS co ON co.token = v.token
    LEFT JOIN c_profiles AS cp ON cp.id = co.profile
    
    WHERE var.cid = 28
    GROUP BY var.id

The results I'm getting are:
![enter image description here][1]

The problem is the revenue and cost results are too hight, because for views,clicks and impressions only the distinct rows are counted, but for revenue and cost for some reason(I would really appreciate an explanation here) all rows in all tables are taken into the result set.

I know this is a large query, but both clicks and conversions tables rely on the views table which is used for filtering the results e.g. views.country = 'uk'. I've tried doing 3 queries and merging them, but that didn't work(it gave me wrong results).

One more thing that I find weird is that if I remove the joins with clicks, conversions, c_profiles the costs column shows correct results.

Any help would be appreciated.

  [1]: http://i.stack.imgur.com/GU4yJ.png