[TYPO3-german] select mit join

Bernd Wilke xoonsji02 at sneakemail.com
Wed Mar 1 13:57:32 CET 2006


Hallo,

Ich möchte in einem FE-Plugin ein Select mit Join machen und weiss nicht
wie ich es mit Typo-funktionen hinbekomme.

konkret geht es darum, dass ich eine Listenansicht mit Detailansicht habe.
Nun sollen für die Liste Selektionen durchgeführt werden, die die
angezeigten Elemente einschränken.
Solange ich in der Tabelle mit den Elementen bleibe funktioniert es auch
ganz prima:

der Kickstarter genieriert folgende Aufrufe:
	$res = $this->pi_exec_query($table, 0/1, $langsel);

die ich erweitern kann:
	$res = $this->pi_exec_query($table, 0/1, $langsel.$subselection);

mit $subselection = ' AND feld="wert"'.

nun sind die Einzelelemente aber Teil einer Hierarchie von drei Tabellen:
in der Art von

country = uid, name, ....

city = uid, name, ... , countryid, ...

street = uid, name, ... , cityid, ....

und ich möchte Abfragen der Art "alle Straßen der Stadt 'XYZ'" oder gar
"alle Straßen des Landes 'ABC'" ermöglichen.

da ich die Methode 'pi_make_list()' überlagere kann ich die Selektion zu
dem Zeitpunkt ausführen, wo ein Datensatz in die Anzeige-Liste geschrieben
wird bzw. werden soll: wenn er nicht dem gewünschten Kriterium entspricht
wird er nicht in das Array tRows[] eingefügt.

Leider gibt es viele Ergebnisse und man muss später in den Ergebnissen
blättern. (pi_list_browseresults())
Dort ist aber nichts von meiner reduzierten Anzahl sichtbar (obwohl ich für
jeden ausgesonderten Datensatz $this->internal['res_count'] reduziere).

Die ursprüngliche Struktur von $results_at_a_time Elementen bleibt sogar
bestehen und jede Seite zeigt nur die Treffer aus diesen $results_at_a_time
Elementen.

Das liegt natürlich daran, dass in pi_list_query() mit $results_at_a_time
ein Limit für die Abfrage gesetzt wird. 

Auch noch dort einzugreifen erscheint mir sehr aufwändig.

Im Prinzip würde ich gern eine vollständige Abfrage machen in der Form:
SELECT street, city, country 
	WHERE country.uid=city.countryid 
	  AND city.uid=street.cityid 
	  AND country.name="ABC"

so dass direkt am Anfang die Anzahl der passenden Datensätze gefunden wird
und ein Besucher darin wie in der gesamten Liste blättern kann.

Bernd

-- 
----------------
Bernd Wilke     
Annweilerstr.20 
40229 Düsseldorf
0211/229 2800



More information about the TYPO3-german mailing list