Php MySQL查询中的多个联接导致错误结果

Php MySQL查询中的多个联接导致错误结果,php,mysql,left-join,Php,Mysql,Left Join,我有一个包含5个连接的大型mysql查询,虽然看起来效率不高,但我正在努力找到一个不同的解决方案 views表是这里的主表,因为clicks表和conversions表都通过标记列依赖它,标记列在所有表中都被索引并设置为外键 查询: SELECT var.id, var.disabled, var.name, var.updated, var.cid, var.outdated, IF(var.type <> 0,'DL','LP') AS `type`, COUNT(DISTIN

我有一个包含5个连接的大型mysql查询,虽然看起来效率不高,但我正在努力找到一个不同的解决方案

views表是这里的主表,因为clicks表和conversions表都通过标记列依赖它,标记列在所有表中都被索引并设置为外键

查询:

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
我得到的结果是:

问题是收入和成本结果太高,因为对于视图、点击和印象,只计算不同的行,但是出于某种原因,收入和成本我非常希望在此解释所有表中的所有行都被纳入结果集中

我知道这是一个很大的查询,但单击和转换表都依赖于用于过滤结果的视图表,例如views.country='uk'。我试过做3个查询并合并它们,但都不起作用,结果不对

还有一件事我觉得很奇怪,如果我通过点击、转换、c_配置文件删除连接,那么costs列将显示正确的结果


任何帮助都将不胜感激。

最后我不得不使用3个不同的查询并对它们进行合并。这似乎是一笔开销,但对我来说很有用。

试着用手将组移除并计算总数。那你就会明白了。总和将每个组的所有内容相加,而不考虑任何表中的不同行。确定。我明白了,但是如何强制它只对不同的行求和呢?您需要在子查询中执行此求和,并将父表连接到已经汇总的结果。这样,您的联接不会重复行。但我不能使用子查询,因为这样我需要对结果进行分组,这将阻止其他联接选择正确数量的行,例如,左联接选择COUNTv.id作为视图,SUMtc.cost作为成本,v.vid,v.token,v.source FROM view AS v LEFT JOIN traffic_cost AS tc ON tc.id=v.source GROUP BY v.vid AS v ON v.vid=var.id LEFT JOIN clicks AS c ON c.token=v.token现在只单击一行以匹配令牌。