Zum Inhalt springen

Inhalte verschachtelt ausgeben

Erstellt am 14. Mai 2007 · 3 Antworten · letzte Antwort am 6. September 2007

Tags: Datenbank, Frage

martin_md ·

Hallo,

ich möchte Content ausgeben, dessen Feld jeweils bei einer weiteren Abfrage verwendet werden soll.

In MYSQL sähe das so aus:

SELECT uid_tabelle1, * FROM tabelle1

wobei für jedes einzelne Ergebnis die weitere Abfrage

SELECT * FROM tabelle2 WHERE uid=uid_tabelle1

Eine JOIN-Abfrage kommt aus bestimmten Gründen nicht in Frage. Deshalb meine Frage: Wie bekomme ich das uid-Ergebnis der ersten Abfrage in die zweite Select-Abfrage hinein. Geht das in irgendeiner Form zum Beispiel mit...

.where = uid = {tx_blablabla:uid}

Außerdem: Wie wäre es bei einer weiteren Verschachtelung?

????

Danke und Gruß
Martin

algiz ·

Wie wär's mit folgendem?

temp.content = CONTENT
temp.content {
    table = tt_content
    pidInList = this
    select.where = (NOT hidden) AND (NOT deleted)
    renderObj = COA
    renderObj {
        10 = LOAD_REGISTER
        10.contentUID.field = uid
        20 = CONTENT
        20 {
            table = tx_blablabla
            select.andWhere {
                data = register:contentUID
                wrap = uid=|
            }
            renderObj = TEXT
            renderObj.field = title
        }
        30 = RESTORE_REGISTER
    }
}

Das Wichtige dabei steht ab Zeile 8: Mit LOAD_REGISTER den Inhalt des Feldes aus tt_content speichern und bei der nächsten select-Anweisung andWhere verwenden, da es praktischerweise vom Typ stdWrap ist.

Da ich den Code nicht getestet habe, könnte es sein, dass RESTORE_REGISTER in Zeile 20 nicht ausreicht und Zeile 9 folgendermaßen aussehen muss:

[...]
        10.contentUID.override.field = uid
[...]

Ich hoffe, es hilft dir.

martin_md ·
algiz schrieb

Wie wär's mit folgendem?

Hallo,

soweit vielen Dank. Ich habe mal was versucht, aber das macht mich immer noch kirre.

tx_einsatz_einsaetze - "Haupttabelle"
tx_einsatz_fahrzeuge - Fahrzeugtabelle (u. a. mit den Feldern Einheit, Fahrzeug)
tx_einsatz_einsaetze_einsatzmittel_mm - Verknüpfungstabelle

zur Tabelle tx_einsatz_einsaetze gibt es über die mm-Tabelle mehrere Zuordnung von Fahrzeugen

Bei der Ausgabe sollen immer zuerst die Einheiten und dann die zugehörigen Fahrzeuge ausgegeben werden:

Einheit 1: Fz 1, Fz3, Fz5
Einheit 2: Fz3, Fz 4 und so weiter

Hier mein TypoScript-Versuch, der sicherlich nicht programmiertechnisch ganz astrein ist:

t = COA
t.10 = TEXT
t.10.field = uid
t.10.wrap = <br><br><b>Einsatz Nr. | </b>
[...] weitere Ausgaben

t.40 = LOAD_REGISTER
t.40.einsatznr.override.field = uid

t.50 = CONTENT
t.50.table = tx_einsatz_fahrzeuge

t.50.select.pidInList = 15
t.50.select.leftjoin = tx_einsatz_einsaetze_einsatzmittel_mm ON tx_einsatz_einsaetze_einsatzmittel_mm.uid_foreign=tx_einsatz_fahrzeuge.uid
t.50.select.andWhere.data = register:einsatznr
t.50.select.andWhere.wrap = tx_einsatz_einsaetze_einsatzmittel_mm.uid_local = |
t.50.select.selectFields = *, MIN(tx_einsatz_einsaetze_einsatzmittel_mm.sorting) AS sort
t.50.select.groupBy = tx_einsatz_fahrzeuge.einheit
t.50.select.orderBy = sort       #Sortierung

t.50.renderObj = COA
t.50.renderObj.1 = LOAD_REGISTER
t.50.renderObj.1.einheit.field = einheit


t.50.renderObj.10 = TEXT
t.50.renderObj.10.field = einheit
t.50.renderObj.10.wrap = <br>Einheit: |
#nur die Einheiten ausgeben


#und hier der Knackpunkt: zu jeder Einheit noch ein Mal die einzelnen Fahrzeuge ausgeben - funktioniert nicht.
t.50.renderObj.20 = CONTENT
t.50.renderObj.20.wrap = Fahrzeuge: |

t.50.renderObj.20.table = tx_einsatz_fahrzeuge
t.50.renderObj.20.select.pidInList = 15
t.50.renderObj.20.select.leftjoin = tx_einsatz_einsaetze_einsatzmittel_mm ON (tx_einsatz_einsaetze_einsatzmittel_mm.uid_foreign=tx_einsatz_fahrzeuge.uid)
t.50.renderObj.20.select.andWhere.dataWrap =  uid_local = {register:einsatznr} AND einheit = '{register:einheit}'

t.50.renderObj.20.renderObj.21 = TEXT
t.50.renderObj.20.renderObj.21.value = <br>uid_local = {register:einsatznr} AND einheit = '{register:einheit}'
t.50.renderObj.20.renderObj.21.insertData = 1


t.50.renderObj.20.renderObj = COA
t.50.renderObj.20.renderObj.10 = TEXT
t.50.renderObj.20.renderObj.10.field = fahrzeugbezeichnung
t.50.renderObj.20.renderObj.10.wrap = <br>|

Wenn ich die Abfrage bewusst mit einem Fehler versehe, bekomme ich in der Fehlermeldung eine astreine SQL-Abfrage, mit der das gewünschte Ergebnis geliefert wird...

SELECT fehlerprovokation
FROM tx_einsatz_fahrzeuge LEFT OUTER JOIN tx_einsatz_einsaetze_einsatzmittel_mm ON (tx_einsatz_einsaetze_einsatzmittel_mm.uid_foreign=tx_einsatz_fahrzeuge.uid)
WHERE tx_einsatz_fahrzeuge.pid IN (15) AND uid_local = 31 AND einheit = 'Einheit 1' AND tx_einsatz_fahrzeuge.deleted=0

Trotzdem funktioniert hier was nicht... kann mir jemand weiter helfen?

martin_md ·
martin_md schrieb

Trotzdem funktioniert hier was nicht... kann mir jemand weiter helfen?

Ich bin der Ursache einen Schritt näher: Bei mehreren Datensätzen einer Gruppe scheint immer der erste nicht angezeigt zu werden.

Kann mir denn keiner weiterhelfen?