Zum Inhalt springen

mySQL Abfrage: pidInList nötig

Erstellt am 21. August 2014 · 2 Antworten · letzte Antwort am 22. August 2014

Tags: Datenbank, TYPO3 6.x, Frage

MrSpock ·

Hallo,

ich habe folgendes Script:

page = PAGE
page.typeNum = 0
page {
  5 = CONTENT
  5 {
    table = pages
    selectedFields = uid, title
    select.pidInList = 60,61,62,63,64,65
    #select.where = (pid = 64)
    renderObj = COA
    renderObj {
      10 = TEXT
      10.required = 1
      10.field = uid
      10.wrap = <p>| <br /></p>
   }

  }

}

Das funktioniert. Wenn ich aber die pidInList Zeile auskommentiere und versuche z.B. durch eine where Klausel zu ersetzten (wie oben auskommentiert), wird mir kein Datensatz angezeigt. Ist pidInList immer nötig? Und wie könnte ich z.B. in eine where Klausel (pid > 60) benutzen? das > Zeichen kann ich ja in TypoScript nur zum Löschen eines Wertes benutzen, oder?

P.S.:

habe jetzt mal folgendes geschrieben

select.where = (pid = 63) OR (pid = 64)

dann funktioniert es auch. Die pid ist 64, also 63 findet gar keinen Datensatz. Schreibe ich

select.where = (pid = 64) OR (pid = 63)

wird wieder nichts angezeigt !?

P.S.S:

Habe die weitere Beobachtung gemacht, dass bei der OR Verknüpfung nur dann eine Datenmenge zurückgegeben wird, wenn (mindestens) die erste Bedingung erfüllt ist.

Chrissli ·

Das liegt daran, dass die queries automatisch so ergänzt werden, dass nur Inhalte für die aktuelle Seite kommen, d.h.

where pid = aktuelleSeitenID

wird automatisch ergänzt, insofern du das nicht mir pidInList anders definiert hast.
Je nach Umfang kannst du einfach das cObject von pidInList mit einem HMENU überschreiben, welches nur die entsprechenden IDs per Komma getrennt zurück gibt.

Ich bin noch nicht in die Verlegenheit gekommen einen größeren Umfang von SeitenIds zu übergeben, evtl lässt sich das ja austricksen indem ein %-Zeichen als ID angegeben wird.

Wenn du Wissen willst wie die query effektiv aussieht, kannst du das SQL-Debug Flag in der Installation auf 2 setzen, dann werden alle Queries ausgegeben.
Wenn du dann in die Abfrage z.b.

where = 999=999

einbaust, findest du die entsprechende Abfrage ziemlich leicht über die Browsersuche ( Achtung Cache )

MrSpock ·

Hallo Chrissli,

danke für die Antwort. Habe mal das SQL - Debug Flag gesetzt und mir das SQL Statement angeschaut. Es ist wie du sagst, dass immer die Abfrage nach der Seiten ID mit drin steht, es sei denn man gibt eine pidInList an. Interessant ist, dass wenn man eine OR Abfrage hinzufügt mit zwei Bedingungen, die zwar jede für sich aber nicht insgesamt geklammert sind, dann werden die Bedingungen nacheinander abgearbeitet und die Seitenabfrage stört nicht mehr. 🙂

Jetzt hab ich es wenigstens verstanden und kann mir überlegen wie ich das hinbekomme.