Отображение левого объединения с несколькими значениями, которые необходимо накопить - PullRequest
0 голосов
/ 18 ноября 2010

У меня есть таблица «URL», и к каждому из «URL» может быть прикреплено несколько «конверсий».Я хочу накопить числовое значение всех конверсий ($) и посчитать количество конверсий, связанных с каждым URL, а также.

В настоящее время я использую внешнее левое соединение, чтобы присоединить таблицу URL ктаблица конверсий, но это просто повторяет запись URL, если есть несколько конверсий.Я хочу знать, что я могу сделать, чтобы решить эту проблему, будь то на стороне базы данных или на стороне логики (я использую PHP / CodeIgniter.)

Если это поможет, вот запрос активной записи CodeIgniter:1005 *

    $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 ]

2 голосов
/ 18 ноября 2010

это должно сработать.

$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 и суммировать конверсии. удачи;)

p.s. я не работал с ci, но это методы, которые вам нужны (строки 2 и 6)

2 голосов
/ 18 ноября 2010

Вам нужно сгруппировать по 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

Извините, код не используется, но я уверен, что вы можете конвертировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...