2010-11-18 4 views
0

私は「URL」の表を持っていて、それぞれの「URL」には複数の「変換」が付いている場合があります。すべてのコンバージョン($)の数値を集計し、各URLに関連するコンバージョン数をカウントします。蓄積する必要がある複数の値を持つ左結合を表示する

現時点では、左側の外部結合を使用してURLテーブルを変換テーブルに結合していますが、複数の変換が接続されている場合はURLレコードが繰り返されます。私はそれがデータベース側またはロジック側にも、私はこの問題を解決するために何ができるかを知りたい

それが助け場合は、ここではCodeIgniterのActive Recordのクエリがある(私はPHP/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(); 

ありがとうございます!

トム

ソリューション:

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によってグループに必要

$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

絶対的なヒーロー!上記のコードを投稿します。 – tommizzle

+1

GROUP BY列にも索引を付ける必要があります。 –

+0

良い点ブルース、これはうまくあなたのクエリをスピードアップします。あなたの更新を遅くし、テーブルが大量(数百万行)の場合は、少し下に挿入することを念頭に置いてください。 –

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でグループ化してコンバージョンを集計する必要があります。幸運;)

p.s.私はCIで働いていませんが、これはあなたが必要とするもののための方法です(行2 & 6)

+0

答えをありがとう!私は同様のクエリを使用しました(上記の記事にedittedされています)。 – tommizzle

関連する問題