[thelist] ASP/SQL Question

rudy r937 at interlog.com
Fri Sep 14 08:44:12 CDT 2001


> Of course a lot of code has been left out, like checking 
> the ProductType and doing an increment. I do see that 
> code like this would be helpful for lots of applications, like 
> listing offices by state, etc. Am I on the right path here?

absolutely

in your pseudocode, you have omitted the logic to test
for a change in ProductType

how's this --

   set  currentType="foobar"  /* initial value */
   begin loop
       get next record
       if ProductType <> currentType
           call finishType
           call initializeType
       endif
       process current record
   end loop
   
notice that before processing each record, you just check
whether this record is in the same group as the previous

you pick an initial value for currentType so that it will
not be equal to the ProductType of the first record,
thus triggering finishType and initializeType

the finishType process would do stuff like printing the totals line
for the previous ProductType -- obviously, you check for currentType
being equal to the initial value, and skip if it is

the initializeType process would do stuff like initializing
counters, printing a ProductType heading line, and setting
currentType equal to the value of ProductType for the
current record

this is basic programming for group subtotals that goes
all the way back to punch card systems....


by the way, in cold fusion the current/previous logic is
*built in* to the way the CFOUTPUT tag works when you
use the GROUP parameter... plus, the "get next record"
is transparent, i.e. it is inherent in the CFOUTPUT tag itself

so in cold fusion, it would look something like this --

   <cfset firsttime="yes">
   <cfoutput  query="queryname"  group="ProductType">
      <cfif firsttime is "yes">
         <cfset firsttime="no">
      <cfelse>
           finish previous group (print subtotals, etc.)
      </cfif>
      do other initialization for new group
      <cfoutput>
           print details for each record
      </cfoutput>
   </cfoutput>

note you still need something to stop printing group
subtotals ahead of the first group



>As an aside, Rudy, why is data shaping evil?

for a simple one-level parent-child relationship,
it is trivial (as mentioned in the 4guys article)

for more complex relationships, it is horrendously
difficult to understand

furthermore, it is proprietary (this is the sense in which
i used the "spawn of satan" description -- microsoft
being known as the evil empire)

yes, i am aware that there are plenty of people who
concede that microsoft, by its dominance of markets,
does not, by definition, produce proprietary code

there also seems, on the surface, to be little harm
in using a proprietary asp solution if you're already 
committed to using asp itself

and i'm not knocking the performance of a data shaping
solution, i have no idea how it would compare to the
performance of a different solution

knowing microsoft, the performance would actually be
pretty good

or maybe not


but basically, i was thinking of the complexity of the 
data shaping solution

here you have asp touted as the entry language for
people just coming in to the world of databases, and
all of a sudden you layer this entirely different logical
structure on top of what is already unnecessarily
complicated programming to access query results

i have seen people run a query, process the result set
in a loop, and for every record, run another query against
a different table -- perhaps because they had never heard 
of a join, perhaps because they theought they were using 
a cursor, perhaps because asp makes this possible without 
running up the performance overhead and turnaround time...

of course, the answer to sluggish performance has always
been Install Bigger Machine (the initials show that this was
a wildly popular strategy even before microsoft)

when the answer to a performance problem is to throw
more hardware at it, you have to wonder who's going to
benefit from the license fees for all the additional server
software that will be required...

i guess i should stop, i seem to be ranting...


rudy
http://rudy.ca/








More information about the thelist mailing list