1

一个多星期以来,我一直在尝试修复此查询,但我无法正确解决此问题。走下一个完整的兔子洞,让我靠近,但越来越大。所以我想从头开始。

正如它最初写的那样:

<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 可以随意删除

4

1 回答 1

1

故障排除如下。从...开始:

<cfquery name="test">
select BM.cid
from BilledMisc BM
where BM.CID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#CID#">) 
and BM.invoiced = 0

然后添加您的第一个加入并再次运行它。如果记录数增加,请运行更多查询以找出原因。

如果在一天结束时,您将获得多行,请查看“选择不同”是否消除了问题。如果没有,请查看返回的数据并确定哪条记录是您想要的。

于 2013-03-20T17:39:13.067 回答