First this I see is to try scoping your "id" var: <CFSET pos = ListFindNoCase(autoOrders, qryAuto.id) >
If the value of "id" is remaining the same as the first query value, then it's always going to return 1 as the list position. You can also output the id value and it's list "pos" as a debug measure if you want... Either inline or using cflog or similar. <cfoutput>#id#:#pos#<br/></cfoutput> If that doesn't uncover your problem, shoot back an email. -Cameron On Wed, Nov 2, 2011 at 5:23 PM, Matthew Nicholson < matthew.nichol...@soltech.net> wrote: > I’m always happy to share an example of bad practices! :D**** > > ** ** > > All things said and done this solution is far from ideal, which is an > understatement, but I’m always excited to hear options and opinions. **** > > ** ** > > From a high level, this is the current process outlined below in code:**** > > **1. **Stored Proc dbo.Orders provides data **** > > **2. **QoQ qryAuto allows us to determine a subset of Orders that > meet specific criteria **** > > **3. **Loop through the QoQ qryAuto to perform specific processes > against specific Orders**** > > **4. **If the order doesn’t meet those requirements, we then modify > the list autoOrders**** > > **5. **Lastly, the autoOrders is used to limit what we display to > the User**** > > ** ** > > <cfstoredproc procedure="dbo.Orders" datasource="#main_dsn#" returncode= > "yes">**** > > <cfprocresult name="Orders" resultset="1" />**** > > </cfstoredproc>**** > > ** ** > > <cfquery name="qryAuto" dbtype="query">**** > > *Select* ***** > > *From* Orders**** > > *Where* Blah Blah Blah**** > > </cfquery>**** > > ** ** > > <CFIF qryAuto.recordCount GT 0>**** > > <CFSET autoOrders = ValueList(qryAuto.id, ", ")>**** > > <CFELSE>**** > > <CFSET autoOrders = 0>**** > > </CFIF>**** > > ** ** > > <CFLOOP QUERY="qryAuto">**** > > ** ** > > <CFIF Check1 & Check2 & Check3>**** > > Do all sorts of goodies**** > > <CFELSE>**** > > <CFSET pos = ListFindNoCase(autoOrders, id)>**** > > <CFIF pos NEQ 0>**** > > <CFSET autoOrders = ListDeleteAt(autoOrders,pos)>**** > > </CFIF>**** > > </CFIF>**** > > </CFLOOP>**** > > ** ** > > In the end, I was curious if I had just run headlong into an issue because > of the use of lists. I will say, the list autoOrders shouldn’t be “long > long” ever as this process is supposed to kick-off continuously. But, if > this is the heart of the issue then a redesign is obviously necessary. * > *** > > ** ** > > Thank you all again for your thoughts and insight!**** > > ** ** > > *Matthew R. Nicholson* > > *SolTech, Inc.* > > *www.soltech.net* > > *(p) 404.601.6000, Ext 233* > > *(c) 770.833.5326* > > *Yes. We can get you there.* **** > > ** ** > > *From:* ad...@acfug.org [mailto:ad...@acfug.org] *On Behalf Of *Cameron > Childress > *Sent:* Wednesday, November 02, 2011 2:49 PM > *To:* discussion@acfug.org > *Subject:* Re: [ACFUG Discuss] List Handling**** > > ** ** > > First, as to your actual problem with listFindNoCase() returning 1, I'd > say show your code. There could be a number of logic problems causing this. > **** > > ** ** > > However, I think you are going to run into another problem first. Because > of the way CF handles lists, it's a real REAL bad idea to keep long lists > and loop over them or do other things to them in code. The longer a list > gets the longer your loop is going to take - not incrementally, closer to > exponentially.**** > > ** ** > > ColdFusion treats a list just like a string, and when you ask for item > 300, it first has to look for the previous 299 items before it gets to 300. > When you ask for item 301? Yup, goes through all 300 again before finally > settling on item 301. It's much MUCH better to use an array or struct or > any other sort of structured data. A ColdFusion list is not structured, > it's just a real long string.**** > > ** ** > > I've seen apps that take 60+ seconds to render a page that uses long > lists. Once converted to arrays, that same page took <1 second to run.*** > * > > ** ** > > Your situation might not be as dire, but the longer your list gets the > worse your potential performance problems are going to get. Short lists > are fine, but I wouldn't want a 300+ item list floating around being looped > over. In my previous example, the list was 4,000+ items long.**** > > ** ** > > Show your code or describe what you are trying to achieve and perhaps we > can collectively help you find a better way.**** > > ** ** > > -Cameron**** > > On Wed, Nov 2, 2011 at 2:35 PM, Matthew Nicholson < > matthew.nichol...@soltech.net> wrote:**** > > Morning All!**** > > **** > > I could swear we had a discussion about this awhile ago (although I may > just be remembering an article from Charlie’s site).**** > > **** > > I’m experiencing a bit of a head scratcher in regards to lists and > managing them. **** > > 1. Using a QoQ, we create a ValueList from one of its columns**** > > a. The ValueList is rather sizable list (400+ entries) of > identifiers**** > > 2. We then iterate through the QoQ and do some logic**** > > 3. Should one of those entries (in the loop based upon the QoQ) not > meet the criteria of the logic, we then remove it from the ValueList > previously created ValueList**** > > **** > > Now, previously, I’d simply search through the list using;**** > > **** > > *ListFindNoCase()***** > > **** > > And then delete the entry in the ValueList that needed to be removed using > *ListDeleteAt()*. **** > > **** > > However, the rub that I’m experiencing now is that *ListFindNoCase()*which > worked previously is now only returning 1 when the entry is found > (even if it’s obviously not the first entry in the list).**** > > **** > > Questions!**** > > · Have you all experienced similar problems with sizable lists?*** > * > > · Do you all know if there is an upper bound of the size of a > list that can be handled by *ListFindNoCase()*?**** > > · Could this be related to the ValueList itself (the index is > being the issue)?**** > > **** > > Thank you as always for your thoughts!**** > > **** > > *Matthew R. Nicholson***** > > *SolTech, Inc.***** > > *www.soltech.net***** > > *(p) 404.601.6000, Ext 233***** > > *(c) 770.833.5326***** > > *Yes. We can get you there.* **** > > **** > > > ------------------------------------------------------------- > To unsubscribe from this list, manage your profile @ > http://www.acfug.org?fa=login.edituserform > > For more info, see http://www.acfug.org/mailinglists > Archive @ http://www.mail-archive.com/discussion%40acfug.org/ > List hosted by FusionLink <http://www.fusionlink.com> > ------------------------------------------------------------- **** > > > > **** > > ** ** > > -- > Cameron Childress > -- > p: 678.637.5072**** > > im: cameroncf**** > > facebook <http://www.facebook.com/cameroncf> | > twitter<http://twitter.com/cameronc> | > google+ <https://profiles.google.com/u/0/117829379451708140985>**** > > ** ** > > ** ** > > ------------------------------------------------------------- > To unsubscribe from this list, manage your profile @ > http://www.acfug.org?fa=login.edituserform > > For more info, see http://www.acfug.org/mailinglists > Archive @ http://www.mail-archive.com/discussion%40acfug.org/ > List hosted by FusionLink <http://www.fusionlink.com> > ------------------------------------------------------------- > -- Cameron Childress -- p: 678.637.5072 im: cameroncf facebook <http://www.facebook.com/cameroncf> | twitter<http://twitter.com/cameronc> | google+ <https://profiles.google.com/u/0/117829379451708140985>