一个多星期以来,我一直在尝试修复此查询,但我无法正确解决此问题。走下一个完整的兔子洞,让我靠近,但越来越大。所以我想从头开始。
正如它最初写的那样:
<cfquery name="unbilledMisc" datasource="#request.dsn#">
SELECT BM.*, C.Client, U.Name, R.FrequencyUnit, R.FrequencyDuration, R.RBID
FROM BilledMisc BM
LEFT JOIN Clients C on C.ClientID = BM.ClientID
LEFT JOIN Users U on U.UserID = BM.UserID
LEFT JOIN RecurringBilling R ON (R.ClientID = C.ClientID AND BM.Rate = R.Rate AND BM.Title = R.Title)
WHERE (BM.CID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">)
AND (BM.Invoiced = 0)
ORDER BY BM.DateCompleted ASC;
</cfquery>
BM*= BM.BMID、BM.Userid、BM.ClientID、BM.Rate、BM.Title、BM.CID、BM.QTY、BM.DateCompleted
输出行如下所示:
<td class=""><input type="checkbox" class="BMIDCheckBoxes" name="BMID" value="#BMID#" />#Client#</td>
<td class="">
<cfif #Qty# eq "">
-
<cfelse>
<a href="##" class="UpdateFeeItem invoices" title="#BMID#">#NumberFormat(Qty, '9999.99')#</a>
</cfif>
</td>
<td class="">#Name#</td>
<td>
<cfif #RBID# neq ''>
<cfswitch expression="#FrequencyUnit#">
<cfcase value="d">
<cfset FreqOutput = 'Day(s)'>
</cfcase>
<cfcase value="ww">
<cfset FreqOutput = 'Week(s)'>
</cfcase>
<cfcase value="m">
<cfset FreqOutput = 'Month(s)'>
</cfcase>
<cfcase value="q">
<cfset FreqOutput = 'Quarter(s)'>
</cfcase>
<cfcase value="yyyy">
<cfset FreqOutput = 'Year(s)'>
</cfcase>
</cfswitch>
<a href="##" name="#RBID#" id="UpdateRecItem" class="link"><img src="images/edit_icon.png" /></a>
Recurrs Every #FrequencyDuration# #FreqOutput#
</cfif>
</td>
<td class="">#DateFormat(DateCompleted, 'mm/dd/yyyy')#</td>
<td style="width:50px;" align="center"><a href="##" class="DeleteFeeItem" title="#BMID#"><img src="images/delete_icon.png" alt="Delete" title="Delete" /></a></td>
我愿意接受任何建议,以更好的方式做到这一点。
您可以设置 1 次费用,或设置类似于一次性费用的费用,然后根据每单位以相同的美元金额在每个设定的时间间隔(日、周、月、季度、年)重复价格和数量。
如果您只支付一次性费用,一切都很好。
当您支付第一笔经常性费用时,一切都很好。
但是假设 2 周过去了,还有 500 个其他客户。而且您将为该客户设置另外 1 次费用,由同一用户设置,对于相同数量的相同产品,我得到一个重复的行,与不同的 BMID 共享相同的 RBID
本质上,这些行中的 1 行具有应该重复发生的一次性费用,以及认为应该重复发生的另一个相同的一次性费用,并且具有第一行的 RBID。
如果您是一家小公司,您会记得进入并编辑第一笔费用的金额,但如果您是一家大公司并且不记得,那么他们就会发现这个错误。
如果我需要详细说明其中的任何部分,请告诉我。我很乐意。
编辑:冒着走向不同方向的风险,我还考虑在循环表中添加一个新列,如果存在,它将保存每个循环项目的 BID。这样我就可以通过 1 列来引用每个一次性费用的经常性费用。
我猜在提交时,它会将所有数据添加到 billedMisc 中的新行中,这会创建一个自动递增的 BMID,然后如果设置了经常性费用,则使用新创建的 BMID 将经常性数据添加到新的经常性计费行中。这将通过特定标识符将它们锁定在一起,而不是查看哪个速率、数量、用户、客户端......匹配。
想法……感觉?
编辑:我在我的项目中放弃了这个查询,并在其中一个表中添加了一个新列以将其锁定到费用项目
如果愿意,Mods 可以随意删除