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 |
Liste von page_ids | |||
Liste von page_ids / stdWrap | this | ||
SQL-orderBy | Ohne ORDER BY . Beispiel: sorting, title | ||
SQL-groupBy | Ohne GROUP BY. Beispiel: CType | ||
int + calc + total | Maximale Anzahl an Einträgen. Sonder-Schlüsselwort: total wird mit count(*) ersetzt. | ||
int + calc + total | Nummer des ersten Datensatzes. Sonder-Schlüsselwort: total wird mit count(*) ersetzt. | ||
SQL-where | Ohne WHERE. | ||
SQL-where / stdWrap | Ohne AND. Beispiel: NOT doktype | ||
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. | ||
string | Auszuwählende Felder, oder COUNT(*). | ||
string | Gibt jeweils einen Tabellennamen für JOIN, LEFT OUTER JOIN und RIGHT OUTER JOIN an. |
Kommentare von registrierten Benutzern:
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") 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
Danke an Nils,
ergänzend dazu noch ein Hinweise wenn man mehrere Tabellen joinen möchte (also multiple joins).
| Typoscript: | Zeilennummerierung: An / Aus |
- 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 :)
| Php: | Zeilennummerierung: An / Aus |
- // 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']);
Im Join-Attribute wird nicht nur der Tabellenname angegeben, sondern auch die Bedingung (USING,ON):
| Typoscript: | Zeilennummerierung: An / Aus |
- 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
- }
enspricht dieser SQL-Syntax:
Es werden also ab dem 23. gefundenen Datensatz insgesamt 10 Datensätze aus der Datenbank ausgelesen.
Beachte, dass uidInList nicht vom Typ stdWrap ist. Was also bei pidInList geht:
geht mit uidInList leider nicht.






