【问题标题】:Join two tables with group by condition按条件加入两个表
【发布时间】:2018-10-02 10:50:25
【问题描述】:

在这里我想加入两个表,并希望产生像这样的输出

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

我无法在这里给出分组声明,如果我只给出两行就会出现,请帮我解决

【问题讨论】:

    标签: php mysql join group-by


    【解决方案1】:

    使用不同的

    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
    

    【讨论】:

    • 这里我得到了这样的结果 Akbar Travels building 2018-10 Thrikandiyur Quarters 2018-10 Akbar Travels building 2018-11 并且如果值不在表 B 中,则该值不会生成,例如这里 category_name Thrikandiyur Quarters 未插入到 tableB 中,因此该值没有取出
    • 我是否应该使用union 来获取所有值,即使没有将一个值插入表中
    • 是的,你可以@user_777,但在你的情况下真的需要吗?
    • 您可以使用完全外连接,但取决于您的情况
    • 我试过了,但没有得到解决方案,你能给我演示一下吗
    【解决方案2】:

    根据您的表格,“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");
    

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多