TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

jetzt buchen

select

Dieses Objekt erzeugt eine MySQL-Abfrage, die Datensätze aus der Datenbank ausliest.

Einige Datensätze sind versteckt oder durch Anfangs- und End-Zeiten zeitgesteuert. Diese Bedingungen werden automatisch der SQL-Abfrage hinzugefügt, indem im tables.php-Array nachgeschlagen wird (enablefields).

Wenn das pidInList-Feature aktiviert ist, wird außerdem jede Seite der pid-Liste, die für den Website-Besucher nicht sichbar ist, aus der pid-Liste entfernt. Daher werden keine Datensätze aus versteckten, zeitgesteuerten oder zugriffsgeschützen Seiten oder dem Recycler ausgewählt.

Eigenschaft

Datentyp

Beschreibung

Standard

uidInList

Liste von page_ids

pidInList

Liste von page_ids / stdWrap

this

orderBy

SQL-orderBy

Ohne ORDER BY . Beispiel: sorting, title

groupBy

SQL-groupBy

Ohne GROUP BY. Beispiel: CType

max

int + calc + total

Maximale Anzahl an Einträgen.

Sonder-Schlüsselwort: total wird mit count(*) ersetzt.

begin

int + calc + total

Nummer des ersten Datensatzes.

Sonder-Schlüsselwort: total wird mit count(*) ersetzt.

where

SQL-where

Ohne WHERE.
Beispiel:
(title LIKE '%IRGENDETWAS%' AND NOT doktype)

andWhere

SQL-where / stdWrap

Ohne AND. Beispiel: NOT doktype

languageField

string

Wenn diese Eigenschaft gesetzt ist, zeigt sie auf das Feld im Datensatz, welches eine Referenz auf einen Datensatz in der sys_language-Tabelle darstellt. Außerdem werden nur Datensätze ausgewählt, bei denen der Wert dieses Feldes mit $GLOBALS["TSFE"]->sys_language_uid (welches mit der »config.sys_language_uid-Option gesetzt wird) übereinstimmt.

selectFields

string

Auszuwählende Felder, oder COUNT(*).

join
leftjoin
rightjoin

string

Gibt jeweils einen Tabellennamen für JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN an.

Kommentare von registrierten Benutzern:

 
Autor Nachricht
Verfasst am: Mittwoch, 02-09-09 18:22
arsi
Dabei seit: 09. 01. 2007
Beiträge: 0
WHERE wird übriges nicht durch den DBAL auf DBMS-spezifische Syntax gefiltert - hier man kann also problemloslos z.B. CONCAT verwenden um Seiten mit einem bestimmten Keyword rauszufinden - oder auch spezfische MySQL-Syntax innerhalb der WHERE-Optimierung (auch wenn es schlechter Stil ist)

z.B.
Tabelle pages:

keyword
-------
key,keyword2,blah,foo

Mit WHERE keyword like '%key%' würde man auch Seiten mit "keyword" (aber ohne "key"icon_wink.gif finden - mit like '%,key,%' würde man "key" nicht finden da am Anfang und Ende des Strings die Kommas fehlen - das Keywords-Feld entsprechend ändern wäre eine Möglichkeit

ergo: CONCAT() muss her
WHERE CONCAT(',', keyword, ',') like ',%key%,'

darüber kann man z.B. noch jeweils ein REPLACE stülpen und ggf. Leerzeichen zu eliminieren da man nicht sicher ist ob foo, bar, baz oder foo,bar, baz eingetragen wird
Verfasst am: Samstag, 09-05-09 13:41
Andreas Haubner
Dabei seit: 09. 05. 2009
Beiträge: 0
Danke an Nils,
ergänzend dazu noch ein Hinweise wenn man mehrere Tabellen joinen möchte (also multiple joins).

TYPOSCRIPT
10 = CONTENT
      10.table = tx_partner_main
      10.select {                              pidInList = 117
      andWhere {
        data = GPVar:id_partner
        wrap =  tx_partner_main.uid=|
      }
      leftjoin = tx_partner_relationships ON(tx_partner_relationships.uid_primary=tx_partner_main.uid) LEFT JOIN tx_partner_relationships2 ON(tx_partner_relationships2.uid_primary=tx_partner_main.uid)
      }
      10.renderObj = COA
      10.renderObj {
        10 = TEXT
        10.wrap = *|*
        10.field = label
      }


Es bringt übrigens nichts "join", "leftjoin" und "rightjoin" gleichzeitig zu verwenden - nur eines davon kommt zur Anwendung.

Folgender Code aus 'typo3/sysext/cms/tslib/class.tslib_content.php' brachte mich zu der Erkenntnis icon_smile.gif

PHP
// Setting up tablejoins:
      $joinPart='';
      if ($conf['join'])  {
        $joinPart = 'JOIN ' .trim($conf['join']);
      } elseif ($conf['leftjoin'])  {
        $joinPart = 'LEFT OUTER JOIN ' .trim($conf['leftjoin']);
      } elseif ($conf['rightjoin']) {
        $joinPart = 'RIGHT OUTER JOIN ' .trim($conf['rightjoin']);
[/HTML]
Verfasst am: Donnerstag, 20-07-06 12:24
Nils
Dabei seit: 24. 11. 2004
Beiträge: 1
Im Join-Attribute wird nicht nur der Tabellenname angegeben, sondern auch die Bedingung (USING,ON):

TYPOSCRIPT
10 = CONTENT
10.table = tx_partner_main
10.select {						pidInList = 117
andWhere {
  data = GPVar:id_partner
  wrap =  tx_partner_main.uid=|
}
leftjoin = tx_partner_relationships ON(tx_partner_relationships.uid_primary=tx_partner_main.uid)
}
10.renderObj = COA
10.renderObj {
  10 = TEXT
  10.wrap = *|*
  10.field = label
}
Verfasst am: Montag, 19-12-05 17:12
Jo
Dabei seit: 01. 05. 2003
Beiträge: 13
TYPOSCRIPT
select.begin = 23
select.max = 10


enspricht dieser SQL-Syntax:
PHP
LIMIT 23, 10


Es werden also ab dem 23. gefundenen Datensatz insgesamt 10 Datensätze aus der Datenbank ausgelesen.
Verfasst am: Montag, 19-12-05 15:13
Jo
Dabei seit: 01. 05. 2003
Beiträge: 13
Beachte, dass uidInList nicht vom Typ stdWrap ist. Was also bei pidInList geht:
TYPOSCRIPT
pidInList.data = GPvar:myNumber

geht mit uidInList leider nicht.