我正在为一个旧项目使用coldfusion,并且在查询方面遇到了问题。我需要列出所有单位从我的单位表和每个单位的所有租户付款。它是使用loop-inside-loop构建的,这使得速度非常慢(代码如下):
<!-- 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>
有没有办法只进行一次查询并获取所有数据?
谢谢
1条答案
按热度按时间dfty9e191#
您可以联接所有三个表:
请记住,前两列(
t.TenantID
,u.UnitName
)将重复多次:中的每行一次TenantTransactions
table。你需要在你的申请表中将它们分组。简单的逻辑就可以了。不管怎样,这个查询比你现在做的要快得多。
另外,如果租户没有事务,则
tt.*
列将全部为空。记住这一点,因为它使用left join
. 这种连接对于确保显示所有租户是必需的,不管他们是否有事务。