显示具有多个需要累积的值的左连接

Posted

技术标签:

【中文标题】显示具有多个需要累积的值的左连接【英文标题】:Displaying left join with multiple values that need to be accumulated 【发布时间】:2010-11-18 12:10:47 【问题描述】:

我有一个“网址”表,每个“网址”可能附有多个“转化”。我想把所有转化的数值($)累加起来,同时统计每个URL相关的转化量。

目前我正在使用左外连接将 url 表连接到转换表,但如果附加了多个转换,这只会重复 URL 记录。我想知道我能做些什么来解决这个问题,无论是在数据库端还是逻辑端(我正在使用 php/CodeIgniter。)

如果有帮助,这里是 CodeIgniter Active Record 查询:

    $this->db->select('url.id, url.url, url.clicks,url.affiliate_url,conversion.commission');
    $this->db->from('url');
    $this->db->join('conversion', 'url.id = conversion.url_id','left outer');
    $this->db->where('url.user_id = '.$this->user_id);
    $this->db->order_by('url.id','DESC');
    $data['urls'] = $this->db->get()->result();

提前致谢!

汤姆

解决方案:

$this->db->select('url.id, url.url, url.clicks,url.affiliate_url,count(conversion.id) AS conversions,sum(conversion.commission) AS earnings');
$this->db->from('url');
$this->db->join('conversion', 'url.id = conversion.url_id','left outer');
$this->db->where('url.user_id = '.$this->user_id);
$this->db->group_by('url.id'); 
$this->db->order_by('url.id','DESC');
$data['urls'] = $this->db->get()->result();
enter code here

【问题讨论】:

【参考方案1】:

您需要按 URL 分组:

SELECT url.id, url.url, sum(url.clicks), count(url.clicks,url.affiliate_url), sum(conversion.commission)
FROM url
LEFT JOIN conversion ON url.id = conversion.url_id
WHERE url.user_id = ?
GROUP BY url.id, url.url
ORDER BY url.id DESC

抱歉,它不在 codeigniter 中,但我相信你可以转换。

【讨论】:

您还需要索引 GROUP BY 列。 好点布鲁斯,这将很好地加快您的查询速度。请记住,如果表很大(数百万行),它可能会减慢您的更新和插入速度。【参考方案2】:

这应该可以解决问题。

$this->db->select('url.id, url.url, url.clicks,url.affiliate_url,conversion.commission');
$this->db->select_sum('conversion.commission');
$this->db->from('url');
$this->db->join('conversion', 'url.id = conversion.url_id','left outer');
$this->db->where('url.user_id = '.$this->user_id);
$this->db->group_by('url.id'); 
$this->db->order_by('url.id','DESC');

您需要按 url 的 id 对结果进行分组并总结转化次数。祝你好运;)

附言我没有使用 ci,但这些是您需要的方法(第 2 行和第 6 行)

【讨论】:

感谢您的回答!我使用了类似的查询(编辑到上面的帖子中。)

以上是关于显示具有多个需要累积的值的左连接的主要内容,如果未能解决你的问题,请参考以下文章

LINQ:具有多个条件的左外连接

具有多个左连接和计数的错误计算(Laravel)

具有 Linq 和默认值的多个左连接

Linq to Entity 具有多个左外连接

如何在 EF / EF Core 中的第二个表上实现具有某些条件的左连接?

SQL 将 MAX 应用于具有非空行的左连接表