Zum Inhalt springen

temp Objekt in select Abfrage

Erstellt am 9. Juni 2011 · 5 Antworten · letzte Antwort am 9. Juni 2011

Tags: Frage

t3_ron ·

Hallo zusammen,

kann mir jemand sagen wie ich ein zuvor erstelltes temp-Objekt in einer select-Abfrage verwenden kann?
Ich möchte den Inhalt eines DB Feldes mit meinem temp-Objekt vergleichen.

So gehts jedenfalls nicht:

select {
pidInList = 18
where = tx_myfield = temp.mytempobject
orderBy =
}

Wenn ich statt des temp-Objektes einen Wert manuell eintrage funktioniert es.
Also wird wohl der Inhalt von temp.mytempobject nicht ausgelesen....
Das temp.mytempobject an sich funktioniert wenn ich es z.B in einen Marker kopiere und ausgeben lasse.

Irgend eine Idee

Vielen Dank schon mal
Gruß t3r

Julian.​Hofmann ·

Hallo.

t3_ron schrieb

Also wird wohl der Inhalt von temp.mytempobject nicht ausgelesen....

Genau. Die where-Eigenschaft ist vom Typ "SQL-where", d.h. mehr oder weniger ein einfacher String. D.h. hier wird nichts TYPO3-spezifisches erwartet/ausgewertet.
Anders sieht es bei der andWhere-Eigenschaft aus. Diese hat zusätzlich stdWrap-Eigenschaften, d.h. hier kannst Du mit TS den Inhalt weiter zusammenbauen. Du musst dann nur zusätzlich noch einen (Dummy-)Wert für die where-Eigenschaft sezuen, da sich andWhere mit "AND..." generiert.

Viele Grüße
Julian

t3_ron ·

Hallo Julian,

vielen Dank für die schnelle Hilfe....

Das mit dem "dummy Where" verstehe ich, aber kannst Du mir vieleicht
eine Idee geben, wie ich im andWhere den Inhalt mit stdWrap herausbekomme?

Dank nochmal für die Hilfe!

Gruß t3r

Julian.​Hofmann ·

Wenn Du nur mit andWhere arbeitest, dann generiert sich eine Abfrage wie:

Select * FROM page WHERE AND spalte='deineBedingung'

Das ist syntaktisch falsch, weil zwischen dem WHERE und AND was fehlt. Das ist die Position, wo der Wert der Where-Eigenschaft erwartet wird. Ein where = 1=1 hilft Dir hier raus:

Select * FROM page WHERE 1=1 AND spalte='deineBedingung'

In der Art sollte es klappen.

select {
  pidInList = 18
  where = 1=1
  andWhere {
    value < temp.mytempobject
    wrap = tx_myfield=|
  }
  orderBy =
}
t3_ron ·

Hallo Julian,

den Part mit where und andWhere habe ich verstanden.

Aber das

andWhere {
    value < temp.mytempobject
    wrap = tx_myfield=|
  }

funktioniert so erst mal nicht. Wie gesagt ich möchte erreichen das selektiert wir wen temp.mytempobject und tx_myfield den gleichen Wert haben...

Die Syntax mit dem value und dem wrap = | erschliesst sich mir leider immer noch nicht.

Vielen Dank
Gruß t3r

Julian.​Hofmann ·

Hm, ok, Coden ohne Testen ist nicht immer so einfach...o.O

andWhere kann über die stdWrap-Eigenschaft als normales cObj verwendet werden:

andWhere = COA

Darauf aufbauen kannst Du dann den Rest zusammenbauen:

andWhere = COA
andWhere {
  10 = TEXT
  10.value = tx_myfield=
  20 < temp.mytempobject
}

Irgendwie in der Art muss es auf alle Fälle sein... o.O