Sorry if I was unclear: I'm not doing any single row queries...here's
the code which may make it clearer.
 
It's a bit "out of context", since this is part of a CFC which is being
called as a web service. I'm making it procedural for simplicity:

The queries (no performance issues here - they execute quite fast
enough):

<!--- This is to get the column list from USER_UPDATE, which has fewer
columns that USERS --->
<cfquery name="collist" datasource="#application.ds#" maxrows="1">
        select * from user_update
</cfquery>      
<!--- Using an Array here, rather than just the columnlist list. An
attempt to improve performance in the loops at the end --->
<cfloop list="#collist.columnlist#" index="i">
        <cfset ArrayAppend(variables.columns,i)>
</cfloop>
                
<cfquery name="getusers" datasource="#application.ds#">
        select #collist.columnlist# from USERS
        where lastupdated >= <cfqueryparam cfsqltype="cf_sql_date"
value="#createodbcdate(since)#">
        order by userid                 
</cfquery>
<cfset variables.userRecords = getusers>

<!--- The subquery here may seem redundant when I could just use
valuelist and the pk result from the previous query, but with 12000
results, this way is MUCH faster than a huge list string) --->          
<cfquery name="getupdated" datasource="#application.ds#">
        select * from USERS_UPDATE
        where userid IN (select userid from users
        where lastupdated >= <cfqueryparam cfsqltype="cf_sql_date"
value="#createodbcdate(since)#">)
</cfquery>
<cfset variables.updatedRecords = getUpdated>


Now, the loops to generate what I need. I am doing this entirely in
cfscript, again for performance:

<cfscript>
        var since = arguments.sincedate;
        var counter = 1;
        getData(since); // calls the above queries              
        // Loop over each record
        for(x=1;x LTE variables.userRecords.recordCount;x=x+1) {
                // Loop through each column
                for (i=1;i LTE ArrayLen(variables.columns);i=i+1){
                 if(variables.updatedRecords[variables.columns[i]][x]
gte createodbcdate(since)) {
                        counter = counter + 1; //just a counter - even
with this as the only output, it's WAY too slow.
                 }      
            }
        }
</cfscript>

> -----Original Message-----
> From: Gaulin, Mark [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, January 09, 2007 12:10 PM
> To: CF-Talk
> Subject: RE: Getting changed fields from database using an audit table
> 
> Try joining the two user tables rather than doing tons of single-row
> queries on the updated table.  Unfortunately you will have to alias
all
> of the columns from one of the tables to get unique column names.
(You
> might do a single query of the users table that returns zero records
> just to get the column names... Then you could build the aliasing SQL
in
> code and then just execute it.)
> 
>       Mark


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Create robust enterprise, web RIAs.
Upgrade & integrate Adobe Coldfusion MX7 with Flex 2
http://ad.doubleclick.net/clk;56760587;14748456;a?http://www.adobe.com/products/coldfusion/flex2/?sdid=LVNU

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:266061
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to