私は「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
絶対的なヒーロー!上記のコードを投稿します。 – tommizzle
GROUP BY列にも索引を付ける必要があります。 –
良い点ブルース、これはうまくあなたのクエリをスピードアップします。あなたの更新を遅くし、テーブルが大量(数百万行)の場合は、少し下に挿入することを念頭に置いてください。 –