Как объединить две таблицы и получить следующий результат? - PullRequest
0 голосов
/ 22 октября 2018

Данные моей таблицы кампании в настоящее время таковы:

id    campaign_name
 1    florist
 2    dentist
 3    restaurants
 4    realestate

И моя вторая таблица (лидерство)

id          campaign_id       business_id
 1               1                13456
 2               1                34563
 3               3                65987
 4               2                45654
 5               3                45632

Я хотел бы перечислить все названия кампании, общее количество потенциальных клиентов для этогосоответствующая кампания JOIN и GROUP BY. (codeigniter)

campaign_name                No. of leads
florist                            2
dentist                            1
restaurants                        2
realestate                         0

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы должны использовать левое соединение

$this->db->select('campaign_name, COUNT(campaign_id) AS `No. of leads`');
$this->db->from('campaign');
$this->db->join('lead', 'campaign.id = lead.campaign_id', 'left');
$this->db->group_by( 'campaign.campaign_name' )
$result = $this->db->get();
0 голосов
/ 22 октября 2018

Другие опубликовали код построителя запросов, так что вот необработанный SQL, который вам понадобится

SELECT
   c.campaign_name,
   COUNT(l.id) as total_leads
FROM
   campaigns AS c
LEFT JOIN
   leads AS l ON c.id = l.campain_id
GROUP BY c.id

Левое объединение важно, потому что вы хотите посчитать это:

 realestate                         0

Гдеу вас есть запись в campaigns для идентификатора 4 и нет записей в leads для этого идентификатора кампании.Я бы также посчитал и сгруппировал по PKEY, вы получите лучшую индексацию и большую надежность (потому что мы знаем, что они уникальны).

0 голосов
/ 22 октября 2018

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

$this->db->select ( 'c.campaign_name,count(l.business_id) as no_of_leads' ,false)
        ->from ( 'campaign as c' )
        ->join ( 'leads l', 'c.id = l.campaign_id','left')
        ->group_by( 'c.campaign_name')
        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...