Php 连接多个表的SQL查询

Php 连接多个表的SQL查询,php,mysql,yii,Php,Mysql,Yii,我有4个表需要连接,以便获得所需的报告。但我对如何编写查询感到困惑。以下是表格样本: 客户表 client_id | client_name | con_id ----------:|:-------------:|:------- 1 | ABC | 1 2 | DEF | 1 3 | GHI | 2 顾问 con_id | con_name -------:|

我有4个表需要连接,以便获得所需的报告。但我对如何编写查询感到困惑。以下是表格样本:

客户表

client_id  |  client_name  |  con_id
----------:|:-------------:|:-------
    1      |     ABC       |  1
    2      |     DEF       |  1
    3      |     GHI       |  2
顾问

con_id  |  con_name
-------:|:---------
   1    |    Ani
   2    |   Robby
烫发

pid  |  client_id  |  date
----:|:-----------:|:-----------
 1   |      1      |  2014-08-09
 2   |      1      |  2014-03-02
 3   |      2      |  2014-03-02 
温度

tid  |  client_id  |  date
----:|:-----------:|:-----------
 1   |     2       |  2013-02-09
 2   |     3       |  2011-03-02
 3   |     3       |  2012-04-02 
我想展示的报告的最终结果如下:

client_id  |  client_name  |  perm(COUNT)  |  temp(COUNT)  |  con_name
----------:|:-------------:|:-------------:|:-------------:|:---------
    1      |       ABC     |       2       |         0     |    Ani
    2      |       DEF     |       1       |         1     |    Ani
    3      |       GHI     |       0       |         2     |    Robby

我试图使用
左外部联接
,但没有得到我想要的结果。有人能帮我解答这个问题吗?感谢高级。您应该通过在一个sql中连接所有查询来连接所有表。请参阅链接

..要选择的内容

                from client_table a 
                Inner join Consultant_table b on a.client_con_id = b.con_id
                Inner join perm_table c on a.client_id= c.perm_client_id
                Inner join Temp_table d on....

这是一个带有count和groupby的简单外部连接查询,只需将
客户机
表与相关表连接起来,并只计算不同的关联即可

select 
c.client_id,
c.client_name,
count(distinct p.pid) perm_count,
count(distinct t.tid) temp_count,
cn.con_name
from client c
left join Consultant cn on(c.con_id = cn.con_id)
left join Perm p on(c.client_id = p.client_id)
left join `Temp` t on(c.client_id = t.client_id)
group by c.client_id 

你试过什么吗?是的,我试过使用内部连接和左外部连接。我对获取数据感到困惑的列是在Perm&Temp列上。我不明白为什么要在这个查询中使用左外部联接。PERM和TEMP中的客户端id都可以用于连接到客户端表上。列TEMP和PERM的计数如何?相同的逻辑,选择d.PERM(计数)作为PERM\U计数,d.TEMP(计数)当temp_count internal join d on d.con_name=b.con_name时,我感到困惑的部分是“perm”和“temp”列,这正是您首先要写的。然后我可以提供解决方案。您好@rani dubey,您可以参考我问题的最后一个表。这就是我需要制作的最终报告。
select 
c.client_id,
c.client_name,
count(distinct p.pid) perm_count,
count(distinct t.tid) temp_count,
cn.con_name
from client c
left join Consultant cn on(c.con_id = cn.con_id)
left join Perm p on(c.client_id = p.client_id)
left join `Temp` t on(c.client_id = t.client_id)
group by c.client_id