Соединить две таблицы с группой по условию - PullRequest
0 голосов
/ 02 октября 2018

Здесь я хочу объединить две таблицы и создать вывод, например,

Akbar Travels building      2018-10
Thrikandiyur Quarters       2018-10


Akbar Travels building     2018-11
Thrikandiyur Quarters      2018-11

Здесь у меня есть имя двух таблиц table A,table B, table A структура выглядит следующим образом

category_id              category_name  
    5               Akbar Travels building          
    6               Thrikandiyur Quarters 

table B структура выглядит следующим образом

id     paying_month     parent_category     
1         2018-10           5   
2         2018-10           5   
3         2018-11           5   
4         2018-11           5   
5         2018-10           6   

Здесь для получения результата я написал свой код кода следующим образом

public function get_date_wise_pdf_report($from, $to)
{
       $query=$this->db->query("SELECT * from tableA A left join tableB B  on A.category_id = B.parent_category and B.paying_month BETWEEN '{$from}' AND '{$to}' ");
       return $query->result();
 }

, но когда я использую это, получаю вот так

Akbar Travels building     2018-10
Akbar Travels building     2018-10
Akbar Travels building     2018-11
Akbar Travels building     2018-11
Thrikandiyur Quarters      2018-10

Я не могу дать групповое утверждение здесь, и если я дал только две строки, то получится, пожалуйста, помогите мне решить

Ответы [ 2 ]

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

Согласно вашим таблицам, "Thrikandiyur Quarters" имеет отношение только к "2018-10".Итак, к вашему выводу добавьте следующую строку: «Thrikandiyur Quarters 2018-11», в вашей таблице b должна быть ссылка, подобная этой:

id  ||   paying_month  ||   parent_category  
6   ||    2018-11      ||    6 

Условие, которое вы используете, это просто между датами.Чтобы вывод не повторялся, вы должны добавить в свой оператор «DISTINCT».Например:

$query=$this->db->query("SELECT DISTINCT * from tableA A left join tableB B  on 
A.category_id = B.parent_category and B.paying_month BETWEEN '{$from}' AND 
'{$to}' ");

Другое решение - использовать GROUP BY:

$query=$this->db->query("SELECT * from tableA A left join tableB B  on 
A.category_id = B.parent_category and B.paying_month BETWEEN '{$from}' AND 
'{$to}' GROUP BY B.parent_category");
0 голосов
/ 02 октября 2018

Использовать отличные

SELECT distinct A.category_name,B.paying_month
from tableA A left join tableB B  on A.category_id = B.parent_category and 
B.paying_month BETWEEN '{$from}' AND '{$to}'
order by B.paying_month
...