Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示需要累加的多个值的左联接_Php_Sql_Mysql_Database_Codeigniter - Fatal编程技术网

Php 显示需要累加的多个值的左联接

Php 显示需要累加的多个值的左联接,php,sql,mysql,database,codeigniter,Php,Sql,Mysql,Database,Codeigniter,我有一个“URL”表,每个“URL”都可能附带多个“转换”。我想累加所有转换的数值($),并计算与每个URL相关的转换量 目前,我正在使用一个左外部连接将url表连接到转换表,但如果附加了多个转换,这只会重复url记录。我想知道我能做些什么来解决这个问题,无论是在数据库方面还是在逻辑方面(我使用的是PHP/CodeIgniter) 如果有帮助,下面是CodeIgniter活动记录查询: $this->db->select('url.id, url.url, url.click

我有一个“URL”表,每个“URL”都可能附带多个“转换”。我想累加所有转换的数值($),并计算与每个URL相关的转换量

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

如果有帮助,下面是CodeIgniter活动记录查询:

    $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

您需要按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中,但我确信您可以转换。

您需要按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中,但我确信您能够转换。

这应该可以实现

$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对结果进行分组,并对转换进行汇总。祝你好运;)


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

这应该可以做到

$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对结果进行分组,并对转换进行汇总。祝你好运;)


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

谢谢您的回答!我使用了一个类似的查询(编辑到上面的帖子中)。谢谢你的回答!我使用了一个类似的查询(编辑到上面的帖子中。)您还需要按列对组进行索引。很好,Bruce,这将很好地加快您的查询速度。请记住,如果表太大(数百万行),它可能会减慢更新和插入速度。您还需要按列对组进行索引。很好,Bruce,这将很好地加快查询速度。请记住,如果表太大(数百万行),它可能会减慢更新和插入的速度。