2013-03-20 4 views
1

일주일 이상이 쿼리를 수정하려고 시도했는데 제대로 작동하지 못했습니다. 나에게 가까이가는 토끼의 구멍을 내렸다. 그러나 점점 더 커졌다. 그래서 처음부터 다시 시작하고 싶습니다.잘못된 논리, MSSQL, Coldfusion, 쿼리 결과 중복

<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을 : 그것은 원래 기록 된 바와 같이

. 나는이 작업을 수행 할 수있는 더 좋은 방법에 어떤 제안에 열려있어

<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> 

: 같은 DateCompleted

출력 행이 보인다.

1 회 요금을 설정하거나 1 회 요금처럼 작동하는 요금을 설정 한 다음 동일한 금액에 대해 모든 설정 간격 (일, 주, 월, 분기, 연도)을 단가와 수량에 따라 달라집니다.

한 번만 결제하면 모든 것이 잘됩니다.

처음 반복 수수료를 내면 모든 것이 잘됩니다.

하지만 2 주 동안 500 명의 다른 고객이 방문한다고 가정 해 보겠습니다. 동일한 고객이 동일한 고객에게 동일한 1 시간 요금을 부과 할 것입니다. 동일한 금액의 동일한 제품에 대해 다른 BMID와 동일한 RBID를 공유합니다.

본질적으로 1 그 행의 재발을 해야하는 일회성 수수료와 그것이 재발한다고 생각하는 다른 동일한 일회성 수수료가 있으며, 첫 번째 행의 RBID가 있습니다.

소규모 회사의 경우 첫 번째 수수료 금액을 입력하고 편집하는 것을 잊지 마십시오. 그러나 큰 회사이고 기억하지 않는 경우이 버그를 해결하십시오.

내가이 부분에 대해 자세히 설명해야하는지 알려 주시기 바랍니다. 나는 행복 할거야.

편집 : 다른 방향으로 갈 위험이 있으므로 반복되는 테이블에 새 항목을 추가하여 각 반복 항목에 대한 BMID가있는 경우이를 유지하는 것이 좋습니다. 그렇게하면 반복 비용이 각 일회성 수수료에 1 열씩 속하는지 만 참조 할 수 있습니다.

제출시 추측하면 자동 증가 BMID를 만드는 billedMisc의 새 행에 모든 데이터를 추가 한 다음 반복 요금이 설정되면 되풀이 데이터를 새로 생성 된 새로 청구 된 행에 추가합니다 BMID. 어떤 비율, 수량, 사용자, 클라이언트가 일치하는지 보지 않고 특정 식별자로 묶어 버립니다.

생각 ... 감정?

편집 : 나는 내 프로젝트에서이 쿼리를 죽겠다 및

가 개조 삭제 주시기 수수료 항목에 잠금 테이블 중 하나에 새 열을 추가 해요 그래서 경사

경우
+1

당신은 어떤 문제가 있는지 분명히 밝히지 않았습니다. – Busches

+1

죄송합니다,이 여러 번 읽었으며 여전히 어떤 문제가 발생하는지 이해하지 못합니다. 쿼리가 "중복 된"결과를 반환합니까? ...? 코드의 * 실제 * 결과는 무엇이며 ... 예상 한 것과 다른 * 방법은 무엇입니까? 작은 데이터 덤프도 볼 수 있습니다. – Leigh

+0

나는 더 많은 설명과 함께 편집했다. 사과드립니다. 나는 어떤 일이 일어나고 있는지, 그리고 내가해야 할 일이 무엇인지보다 모든 정보가 거기에 있는지 확인하는 데 더욱 집중했습니다. lookng 주셔서 감사. –

답변

1

다음과 같이 문제를 해결하십시오.시작 :

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

그런 다음 첫 번째 가입하고 다시 실행 추가합니다. recordcount가 증가하면 더 많은 쿼리를 실행하여 이유를 찾습니다.

하루가 끝날 때 "선택 별색"으로 문제가 해결되는지 확인하려면 여러 행을 가져 가야합니다. 그렇지 않으면 반환되는 데이터를보고 원하는 레코드를 결정하십시오.

+0

고맙습니다. 지금부터 시작하겠습니다. –