Max*_*Boy 1 mysql sql coldfusion
我正在使用coldfusion进行旧项目,我遇到了查询问题.我需要从我的单位表中列出所有单位,并为每个单位列出所有租户付款.它是使用循环内部循环构建的,这非常慢(代码如下):
<!-- This query returns 511 Units -->
<cfquery name="getPropertyUnits" dataSource="rent">
Select t.TenantID, u.UnitName
From Units u
INNER JOIN Tenants t on U.UnitID = t.UnitID
Where u.Occupied = 1
and u.PropertyID = 8
and t.Prospect = 2
Order By u.UnitName
</cfquery>
<!-- Loop the query getPropertyUnits -->
<cfloop query="getPropertyUnits">
<!-- Each loop interaction, I get the transactions -->
<!-- Just hard code date for testing -->
<cfquery dataSource="rent" name="getTransactions">
Select * From TenantTransactions
Where TenantID = #TenantID#
AND TenantTransactionDate BETWEEN '2018-05-01' AND '2018-05-23'
Order By TenantTransactionDate
</cfquery>
<!-- Loop the second query -->
<cfloop query="getPropertyUnits">
<!-- Work with data -->
</cfloop>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
有没有办法只做一个查询并获取所有数据?
谢谢
您可以加入所有三个表:
SELECT t.TenantID, u.UnitName, tt.*
FROM Units u
INNER JOIN Tenants t ON U.UnitID = t.UnitID
LEFT JOIN TenantTransactions tt ON tt.tenantid = t.id
AND tt.TenantTransactionDate BETWEEN '2018-05-01' AND '2018-05-23'
WHERE u.Occupied = 1
AND u.PropertyID = 8
AND t.Prospect = 2
ORDER BY u.UnitName, tt.TenantTransactionDate
Run Code Online (Sandbox Code Playgroud)
请记住,前两列(t.TenantID,u.UnitName)将重复多次:TenantTransactions表中每行一次.您需要在应用程序中将它们分组.简单的逻辑就可以了.
无论如何,这个查询比你现在正在做的要快得多.
此外,如果租户没有事务,则tt.*列中的值都将为null.记住这一点,因为它使用了left join.这种联接对于确保所有租户都被展示是必要的,无论他们是否有交易.