私は私のプロジェクトでDBの値と.csvファイルの値を比較しなければならないところに取り組んでいます。 'cfhttp'
を使用して.csvをクエリに変換した後、そのクエリとDBから値を取得するために使用した別のクエリをループします。これら2つのループの中でif文を使って値を比較し、一致するかどうかを調べました。次に、それらをリストに格納し、それらのリストをcfqueryタグで使用して更新しました。 DBには14kレコード、.csvファイルには同数のレコードがあります。私の現在のコードは、テスト目的のために、リストから画面にレコードを出力するのに2分以下しかかかりません。私はまだ更新がどれくらいかかるかテストしなかった。アップデートを実行する前に、私のプロジェクトに他のアプローチをお勧めする人がいたら見たいですか?実行時間を現在の時間よりも短くすることはできますか?ここで私が持っている私のコードは次のとおりです。2つの別々のquiresの値を比較する方法はありますが、内部ループは使用しませんか?
<cfhttp name="records" columns="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X" method="get" url="http://path to csv/temp.csv"/>
<cfquery name="getRecords" datasource="test">
Select s.ID, f.URID, s.UR_NUMBER, CODE, f.FIELD
From USERS s
Left Outer Join MAPS f
ON s.ID = f.URID
</cfquery>
<cfset NumA = "">
<cfset NumB = "">
<cfset NumC = "">
<cfset NumD = "">
<cfset NumE = "">
<cfset updNumD = "">
<cfset updNumE = "">
<cfloop query="records">
<cfloop query="getRecords">
<cfif records.A EQ getRecords.UR_NUMBER>
<cfif records.W NEQ getRecords.CODE>
<cfif records.W EQ 'A'>
<cfset NumA = ListAppend(NumA,"#records.A#")>
<cfelseif records.W EQ 'B'>
<cfset NumB = ListAppend(NumB,"#records.A#")>
<cfelse>
<cfset NumC = ListAppend(NumC,"#records.A#")>
</cfif>
</cfif>
<cfif getRecords.URID EQ ''>
<cfif records.W EQ 'D'>
<cfset NumD = ListAppend(NumD, "#getRecords.ID#")>
<cfelseif records.W EQ 'E'>
<cfset NumE = ListAppend(NumE, "#getRecords.ID#")>
</cfif>
<cfelse>
<cfif records.W EQ 'E'>
<cfset updNumD = ListAppend(updNumD, "#getRecords.URID#")>
<cfelseif records.W EQ 'D'>
<cfset updNumE = ListAppend(updNumE, "#getRecords.URID#")>
</cfif>
</cfif>
</cfif>
</cfloop>
</cfloop>
私は画面に私のリストをダンプ:それはcfhttpタグと私はから必要なだけの列を取得することが可能です場合
<cfdump var="#NumA#">
<cfdump var="#NumB#">
<cfdump var="#NumC#">
<br>
<cfdump var="#NumE#">
<cfdump var="#NumD#">
<br>
<cfdump var="#updNumE#">
<cfdump var="#updNumD#">
はまた、私は思っていました私の.csv?今私は自分の.csvからすべてのカラムをガービングしていますが、カラムAとWのうちの2つだけを使用しても、'cfhttp'
からDBからのクエリにクエリを結合することは可能ですか?誰かが私にこのプロジェクトに関するアドバイスをくれれば教えてください。
cflib.orgには2つの機能があります。 ListCompareは、1つのリスト内にあるものとそうでないものを示します。 ListAndは両方のリストにあるものを示します。 14 Kのレコードでは、これはおそらくクエリのクエリよりも優れたアプローチです。 –
'listAppend()'の代わりに 'arrayAppend()'を使って処理を大幅に高速化する必要があります。リストとして出力する必要がある場合は 'arrayToList()'を使うことができます。基本的に引用符を使用している場所でも引用符をドロップすることができます。なぜ ""#getRecords.ID# "'は 'getRecords.ID'になります –
@MattBuscheなぜ私は最初に配列に格納し、それをリストに変換しますか?それは私のページの全体的なプロセスに時間がかかります。また、特定のフィールドの更新を実行するだけでWHERE句に配置できるので、リストを使用しています。 –