Gute Zeilen, schlechte Zeilen – Folge 5 – Query of Queries

by marcus on 26/09/2003



Back in Blog!
Nach einiger Zeit der Blog-Abstinenz melde ich mich nun wieder zu Wort…

Einige werden sich sicherlich Fragen, warum ich eine mehrwöchige Schreibpause
eingelegt habe – nun – ich war nach einer Gehirnwäsche eine Zeit lang
Oberpostvorsteher
in einem kleinen Dorf und… ach nein, lassen wir das… zum Thema!:-)

Ich hatte sehr oft Aufträge à la "kannst Du das mal eben
schneller machen?"
und bin dabei häufig auf eine Programmiermethode gestoßen, die gerne
z.B. zum Darstellen von Artikelübersichten in Shops genutzt wird:

<cfquery name="getItems" datasource="shopDB">
	select itemID, itemName
	from items
	where group = #url.group#
</cfquery>

<cfoutput query="getItems">
	<cfquery name="getDetails" datasource="shopDB">
		select onStock, whatEver 
		from items
		where condition = true
		and itemID = #getitems.itemID#
	</cfquery>
	We currently have #getDetails.onStock# x #getItems.itemName# on stock.<br>
</cfoutput>

Das Prinzip ist hierbei, dass eine Hauptquery die Loop-Basis bildet und in
der Loop dann weitere Details geholt werden. Sicherlich werden viele
das Prinzip wiedererkennen. Okay, der Code ist relativ sinnfrei, es geht
mir hier aber lediglich um’s Prinzip. 🙂

Um hier mit relativ wenig Aufwand eine deutliche Steigerung der Performance
zu erreichen, kann man die erste Abfrage sozusagen als BaseQuery definieren
und weitere Abfragen mittels QoQ gegen dieses Queryset laufen lassen.
Somit ist die Datenbank entlastet:

<cfquery name="itemBase" datasource="shopDB">
	select itemID, itemName, [...]
	from items
	where group = #url.group#
</cfquery>

<cfoutput query="getItems">
	<cfquery name="getDetails" dbtype="query">
		select onStock, whatEver 
		from itemBase
		where condition = true
		and itemID = #getitems.itemID#
	</cfquery>
	We currently have #getDetails.onStock# x #getItems.itemName# on stock.<br>
</cfoutput>

Alle Queries innerhalb der Schleife holen sich ihre Daten nun aus dem RAM.
Dieser Tip ist z.B. für diejenigen interessant, die mit CF und Access
arbeiten (müssen). Access ist irgendwann am Ende seiner Kräfte,
daher sollte man’s entlasten, wo nur eben möglich.

Comments on this entry are closed.

Previous post:

Next post: