2013-03-12 2 views
3

Я делаю проект в codeigniter.Here я хочу присоединиться три таблицыприсоединиться три таблицы в CodeIgniter с одного до многих отношений

клиентов (номер, имя, адрес электронной почты, adminId, CAMPAIGNID, dateAdded, is_deleted)

Кампания (id, name, adminId) и

заказ (id, name, cost, dateAdded, clientId).

Из этих таблиц я хочу выбрать (между двумя датами) количество добавленных клиентов, название кампании и общую стоимость заказа клиента. Когда я присоединился к двум таблицам (клиентам и кампании), он вернет правильный результат.

Запрос я использовал

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) as client_date, 
    COUNT(clients.id) AS num_rows'); 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

Но когда я присоединился три таблицы (клиенты, кампании, заказ) он не возвращает правильный result.The отношения между клиентом и порядка один к одному клиенту many.Ie может иметь более чем один order.So это не даст правильное значения общего количества клиентов добавлено между двумя dates.The присоединиться запросом я использовал, чтобы присоединиться три таблицы является

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) AS client_date, 
    SUM(order.cost) AS order_cost, 
    COUNT(clients.id) AS num_rows'); 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('clients.is_deleted', 0); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->join('order', 'order.clientId = clients.id', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

может у кого есть некоторое представление о том, чтобы сделать это. Заранее спасибо

+0

Получаете ли вы какие-либо результаты или просто не ожидаете результатов? – Gavin

+0

@ Gavin Да. У меня есть некоторые результаты. Но не ожидаемый. – Balu

+0

Единственное, что я заметил между вашими двумя запросами, это то, что вы используете 'clients.is_deleted = 0' на свой второй запрос, где вы не на первом. Кроме этого, ваш запрос выглядит хорошо для меня? – Gavin

ответ

2

я получил ожидаемый результат подсчета отчетливого client.id (COUNT (DISTINCT (clients.id))) для числа клиентов добавил,

$this->db->select('clients.id AS my_client, 
    clients.name AS client_name, 
    campaign.name AS campaign_name, 
    DATE(clients.dateAdded) AS client_date, 
    SUM(order.cost) AS order_cost, 
    COUNT(DISTINCT(clients.id)) AS num_rows'); //changed the code here from COUNT(clients.id) AS num_rows 

$this->db->from('clients'); 
$this->db->where('clients.adminId', $adminId); 
$this->db->where('clients.is_deleted', 0); 
$this->db->where('DATE(clients.dateAdded) >=', $from_date); 
$this->db->where('DATE(clients.dateAdded) <=', $to_date); 
$this->db->join('campaign', 'campaign.id = clients.campaignId', 'left'); 
$this->db->join('order', 'order.clientId = clients.id', 'left'); 
$this->db->group_by('campaign_name'); 
$query = $this->db->get(); 
return $query->result(); 

Я не думаю, что это правильный way.Is там любой лучший способ сделать это. Спасибо за вашу поддержку.

Смежные вопросы