20. Januar 2011 in TYPO3 von Leo

In TYPO3 lassen sich per TypoScripts normale Subqueries bilden, wie man sie aus MySQL kennt. Das ganze lernte ich im Zusammenhang mit einem RSS Feed, welchen ich für einen Kunden erstellte. So musste ich mit einer ID welche ich zu beginn über eine Variable von RealURL erhielt in grossen mm_Tables nach nach weiteren ID’s suchen, mit welchen ich dann zum Ziel kam.

Für solche grosse Sprünge in Tabellen nutzten wir dann Subqueries, sozusagen Queries in Queries, welche bis ins unendliche verschachtelt werden können (Achtung Ladezeiten!).

elementxy = CONTENT
elementxy {
        # Die Tabelle die durchsucht wird
        table = tx_extension_unsere_tabelle
        select {
            andWhere {
                # Optional: Eine Variable welche wir mitbekommen (get)
                data = GP:tx_extension_pi1|showUid
                insertData = 1
                wrap = uid IN (SELECT uid_local FROM tx_extension_unsere_tabelle_auth_mm WHERE uid_foreign IN (SELECT uid_foreign FROM tx_extension_unsere_tabelle_head_mm WHERE uid_local = |))
            }
            # Der Sysfolder mit den Datensätzen
            pidInList = 1234
            orderBy = crdate DESC
            max = 15
        }

        renderObj = COA
        renderObj {
            # Das Feld welches vom SELECT ausgewählt wird
            field = title
            # Das Resultat wird gewrappt
            wrap = <item>|</item>
       }
}

Was wird also gemacht?
Zuerst geben wir die Tabelle an welche wir mit dem normalen SELECT auswählen, also SELECT … FROM . Welche Spalte wir ins SELECT werfen wird weiter unten im renderObj.field bestimmt, unser normales SELECT würde also so aussehen:

SELECT title FROM tx_extension_unsere_tabelle ...

Das ist natürlich noch nicht alles. Nach dem normalen SELECT geht es weiter mit dem andWhere aus unserem TypoScript Code. Dieses andWhere Statement hängt eigentlich nur ein WHERE an unseren bisherigen Code und wird dann mit dem Rest was im andWhere steht weitergeführt. Deshalb steht im andWhere auch nicht noch ein SELECT oder ähnlich am Anfang.

Nachdem unser Query mit den Subqueries gebildet wurde, wird mit pidInList die ID unseres Sysfolders angegeben, also der Sysfolder wo die Datensätze gespeichert sind, welche wir hier benötigen. OrderBy und Max sind normale SQL Statements, welche sicherlich jedem bekannt sind.

Danach wird unser Resultat gerendert und in den Wrap geschrieben (dort wo die Pipe “|” ist), wir können das ganze noch z.B. mit HTML Code wrappen.