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

时间:2010-11-18 12:10:47

标签: php sql mysql database codeigniter

我有一个“网址”表格,每个“网址”可能会附加多个“转化次数”。我想累积所有转化次数($)的数值,并计算与每个网址相关的转化次数。

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

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

    $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

2 个答案:

答案 0 :(得分:2)

您需要按网址进行分组:

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中,但我确信你能够转换。

答案 1 :(得分: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');

您需要按照网址的ID对结果进行分组,并总结转化次数。祝你好运;)

P.S。我没有使用ci,但这些是你需要的方法(第2行和第6行)