4 Reaktionen zu “Kommaseparierte Liste von Seiten in TYPO3”

Kommentare abonnieren (RSS) oder TrackBack URL

Hi,
danke für die Methoden, auch wenn ich diese schon kannte 😉 Denke diese gehören zu den eher unbekannten Methoden.

Zu Deinem Beispiel ein Hinweis:
$where = ‚pid IN (‚ . $liste . ‚)‘,

Ein Select mit „IN“ kann echt gefährlich werden. Je größer die Tabelle wird, desto langsam wird dieses Query. Hier sollte man sehr vorsichtig sein.

Gruß
_Frank

Frank am 22. November 2009 um 19:59

@Frank: Das ist natürlich Richtig, aber poste doch mal ein Beispiel, wie du den Ausgangspunkt alternativ mit in dein Select einbeziehst…
Cheers, Alex

Alex Kellner am 23. November 2009 um 14:28

Mal eben auf die schnelle aus dem Kopf (ungetestet):

$liste = $this->pi_getPidList($this->cObj->data[‚pages‘], $this->cObj->data[‚recursive‘]); // 1,3,4,6

$addWhereParts = array();
foreach ($liste as $pid) {
$addWhereParts[] = „pid = {$pid}“;
}
$addWhere = implode(‚ OR ‚, $addWhereParts);

$GLOBALS[‚TYPO3_DB‘]->exec_SELECTquery (
$select = ‚*‘,
$form = ‚table‘,
$where = „1 AND ({$addWhereParts})“,
$groupby = “,
$orderby = “,
$limit = 1
);

Es gibt auch noch eine elegante Art direkt per MySQL, aber das wäre dann nicht mehr TYPO3 konform, weil das nicht mehr über TYPO3_DB geht.

Das Beispiel oben erzeugt ein ggf große WHERE clause, welche aber immer noch um ein vielfaches schneller ist als das IN (…) Konstrukt.

Frank am 23. November 2009 um 16:27

sorry,

natürlich:
$where = “1 AND ({$addWhere})”,

und nicht:
$where = “1 AND ({$addWhereParts})”,

Frank am 23. November 2009 um 16:28

Kategorien

Archiv