带左外连接的php mysql
我在mysql表1和表2中有两个表 表1包含以下字段带左外连接的php mysql,php,mysql,join,Php,Mysql,Join,我在mysql表1和表2中有两个表 表1包含以下字段 Field Type intProjectId int(11) intSourceId int(11) intClientId int(11) varProject varchar(200) fltAmount float varAmountType varcha
Field Type
intProjectId int(11)
intSourceId int(11)
intClientId int(11)
varProject varchar(200)
fltAmount float
varAmountType varchar(50)
dtStart date
dtEnd date
Field Type
intPercentageId int(11)
intProjectId int(11)
floatPaymentpercentage float
ddDate datetime
表2有以下字段
Field Type
intProjectId int(11)
intSourceId int(11)
intClientId int(11)
varProject varchar(200)
fltAmount float
varAmountType varchar(50)
dtStart date
dtEnd date
Field Type
intPercentageId int(11)
intProjectId int(11)
floatPaymentpercentage float
ddDate datetime
连接两个具有公共项目id的表。如果表2没有具有特定项目id的记录,则可以将其连接为null
表1列出了项目数据
表2给出了其完成百分比。(每个项目有多个记录。)
项目Id——公共字段
我使用了以下查询
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId
GROUP BY table1.varProject ORDER BY table2.intPercentageId DESC
这里我得到的输出是百分比表返回每个项目的第一条记录。我需要表2最后插入的记录
表1==>项目id 5
表2中有3条项目Id为5的记录。我想从表2中找出最后一条记录。现在它返回表2中的第一条记录
如何更改查询。请帮我把这个修好 试试这个
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.intProjectId = table2.intProjectId
GROUP BY table1.varProject HAVING MAX(table2.intPercentageId)
“Order By”在“Group By”完成后运行,这就是为什么它没有给出预期的结果。我建议的更改将给出第二个表中百分比最高的行,根据场景,该行应为项目的最后一行。计算表2中每个项目的最大记录,并使用该信息获取最新记录。下面是一个使用
分组方式的方法:
select t1.*
from table1 t1 join
table2 t2
on t1.intProjectId = t2.intProjectId join
(select t2.intProjectId, max(intPercentageId) as maxpi
from table2 t2
group by t2.intProjectId
) tt2
on t2.intProjectId = tt2.maxpi;
计算表2中每个项目的最大记录,并使用该信息获取最新记录。以下是使用分组方式的方法:
select t1.*
from table1 t1 join
table2 t2
on t1.intProjectId = t2.intProjectId join
(select t2.intProjectId, max(intPercentageId) as maxpi
from table2 t2
group by t2.intProjectId
) tt2
on t2.intProjectId = tt2.maxpi;