---
title: "Suche mit 1-N Relation"
url: "https://www.typo3.net/d/33497-suche-mit-1-n-relation"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Datenbank","Frage"]
created: "2005-11-18"
last_reply: "2007-12-28"
replies: 26
solved: false
page: 1
pages: 1
lang: "de"
---

# Suche mit 1-N Relation

Extensions › Entwicklung · 26 Antworten · gestartet 2005-11-18

## Eröffnungsbeitrag

**suitside** · 2005-11-18 · [Beitrag #1](https://www.typo3.net/d/33497-suche-mit-1-n-relation/1)

Hallo Zusammen,

ich habe eine Extension mit dem Kickstarter erstellt, die mir zu einer PLZ den entsprechenden Eintrag ausgeben soll. Das funktioniert auch wunderbar, aber jetzt komme ich nicht weiter:
Die Suche soll in der Tabelle 1 (N-1) den jeweiligen Eintrag aus der Tabelle 2 ausgeben. Ich glaube, dass ich dafür die pi_exec_query anpassen muss, bin mir aber nicht sicher, weil alle Versuche bis jetzt erfolglos geblieben sind.

Vielen dank im voraus

Gruß Conny

## Antworten

### [#2](https://www.typo3.net/d/33497-suche-mit-1-n-relation/2) · suitside · 2005-11-18

mmmhh, vielleicht nochmal ein bißchen genauer: Ich brauche folgende SQL-Abfrage und würde sie gerne nicht irgendwie, sondern im Sinne des Erfinders integrieren:

```php
SELECT tx_table_1* FROM tx_table_1, tx_table_2 WHERE tx_table_2.zip = $sword AND tx_table_2.manager = tx_table_1.uid
```

### [#3](https://www.typo3.net/d/33497-suche-mit-1-n-relation/3) · steffenk · 2005-11-18

wie sollen wir Dir helfen wenn wir nicht wissen, in was es integriert werden soll ?
Was willst Du **genau** wissen ?

### [#4](https://www.typo3.net/d/33497-suche-mit-1-n-relation/4) · suitside · 2005-11-18

ok, also...
ich hab mit dem Kickstarter eine Extension mit 2 Tabellen erstellt.

Tabelle 1
uid  wert1 ...
3    xyz   ...
4    xyz   ...

Tabelle 2
uid  wert  rel
1    1234  3
2    1235  3
3    1236  4

Tabelle2.rel ist im Kickstarter als Database Relation zu Tabelle1.uid definiert.
Unter 'Frontend Plugins' hab ich bei 'If you have configured custom tables you can select one of the tables to list by default as an example:' Tabelle 2 ausgewählt.
Dadurch generiert der Kickstarter folgenden Code für die Ausgabe als Liste:

```php
function listView($content,$conf)	{
		$this->conf=$conf;		// Setting the TypoScript passed to this function in $this->conf
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();		// Loading the LOCAL_LANG values
		$this->pi_USER_INT_obj=1;	// Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object!
		$lConf = $this->conf["listView."];	// Local settings for the listView function

		if ($this->piVars["showUid"])	{	// If a single element should be displayed:
			$this->internal["currentTable"] = "tx_table_2";
			$this->internal["currentRow"] = $this->pi_getRecord("tx_table_2",$this->piVars["showUid"]);

			$content = $this->singleView($content,$conf);
			return $content;
		} else {
			$items=array(
				"1"=> $this->pi_getLL("list_mode_1","Mode 1"),
				"2"=> $this->pi_getLL("list_mode_2","Mode 2"),
				"3"=> $this->pi_getLL("list_mode_3","Mode 3"),
			);
			if (!isset($this->piVars["pointer"]))	$this->piVars["pointer"]=0;
			if (!isset($this->piVars["mode"]))	$this->piVars["mode"]=1;

				// Initializing the query parameters:
			list($this->internal["orderBy"],$this->internal["descFlag"]) = explode(":",$this->piVars["sort"]);
			$this->internal["results_at_a_time"]=t3lib_div::intInRange($lConf["results_at_a_time"],0,1000,1);		// Number of results to show in a listing.
			$this->internal["maxPages"]=t3lib_div::intInRange($lConf["maxPages"],0,1000,1);;		// The maximum number of "pages" in the browse-box: "Page 1", "Page 2", etc.
			$this->internal["searchFieldList"]="zip";
			$this->internal["orderByList"]="uid,zip";

				// Get number of records:
			$res = $this->pi_exec_query("tx_table_2",1);
			list($this->internal["res_count"]) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);

				// Make listing query, pass query to SQL database:
			$res = $this->pi_exec_query("tx_table_2");
			$this->internal["currentTable"] = "tx_table_2";

				// Put the whole list together:
			$fullTable="";	// Clear var;

				// Adds the search box:
			$fullTable.=$this->pi_list_searchBox();

				// Adds the whole list table
			$fullTable.=$this->pi_list_makelist($res);

				// Returns the content from the plugin.
			return $fullTable;
		}
	}
```

Jetzt möchte ich gerne mit pi_list_searchBox() Tabelle2.wert suchen und über die Relation Tabelle2.rel->Tabelle1.uid die Werte von Tabelle1 ausgeben.

Die SQL-Abfrage dafür steht oben, aber ich weiß nicht, wie genau ich die Funktion listView() modifizieren muss, damit er mir als Suchergebnis die Werte aus Tabelle 1 ausgibt und nicht die Werte aus Tabelle 2.

Vielen Dank!

### [#5](https://www.typo3.net/d/33497-suche-mit-1-n-relation/5) · steffenk · 2005-11-18

Da Du Deine SQL schon formuliert hast, weiche doch aus auf

$GLOBALS['TYPO3_DB']->sql_query($sql);

### [#6](https://www.typo3.net/d/33497-suche-mit-1-n-relation/6) · suitside · 2005-11-18

kannst du das ein bißchen mehr erklären?
Gruß Conny

### [#7](https://www.typo3.net/d/33497-suche-mit-1-n-relation/7) · boonkerz · 2005-11-18

Bitte: <http://typo3.org/documentation/document-library/doc_core_cgl/Using_the_wrapper_cl/>

### [#8](https://www.typo3.net/d/33497-suche-mit-1-n-relation/8) · suitside · 2005-11-18

es ist mir ja schon fast peinlich, aber meinst du, du kannst mir in diesem konkreten Fall sagen, welche Code-Teile ich jetzt ersetzen muss und welche rausfallen?

```php
function listView($content,$conf)       {
                $this->conf=$conf;            // Setting the TypoScript passed to this function in $this->conf
                $this->pi_setPiVarDefaults();
                $this->pi_loadLL();          // Loading the LOCAL_LANG values
                $this->pi_USER_INT_obj=1;       // Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object!
                $lConf = $this->conf["listView."];      // Local settings for the listView function

                if ($this->piVars["showUid"])   {  // If a single element should be displayed:
                        $this->internal["currentTable"] = "tx_table_2";
                        $this->internal["currentRow"] = $this->pi_getRecord("tx_table_2",$this->piVars["showUid"]);

                        $content = $this->singleView($content,$conf);
                        return $content;
                } else {
                        $items=array(
                                "1"=> $this->pi_getLL("list_mode_1","Mode 1"),
                                "2"=> $this->pi_getLL("list_mode_2","Mode 2"),
                                "3"=> $this->pi_getLL("list_mode_3","Mode 3"),
                        );
                        if (!isset($this->piVars["pointer"]))   $this->piVars["pointer"]=0;
                        if (!isset($this->piVars["mode"]))      $this->piVars["mode"]=1;

                                // Initializing the query parameters:
                        list($this->internal["orderBy"],$this->internal["descFlag"]) = explode(":",$this->piVars["sort"]);
                        $this->internal["results_at_a_time"]=t3lib_div::intInRange($lConf["results_at_a_time"],0,1000,1);              // Number of results to show in a listing.
                        $this->internal["maxPages"]=t3lib_div::intInRange($lConf["maxPages"],0,1000,1);;                // The maximum number of "pages" in the browse-box: "Page 1", "Page 2", etc.
                        $this->internal["searchFieldList"]="zip";
                        $this->internal["orderByList"]="uid,zip";

			$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT tx_table_1* FROM tx_table_1, tx_table_2 WHERE tx_table_2.zip = '.$sword.' AND tx_table_2.manager = tx_table_1.uid ');
			while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
				echo $row['title'].'<br />';
			}

                                // Put the whole list together:
                        $fullTable="";  // Clear var;

                                // Adds the search box:
                        $fullTable.=$this->pi_list_searchBox();

                                // Adds the whole list table
                        $fullTable.=$this->pi_list_makelist($res);

                                // Returns the content from the plugin.
                        return $fullTable;
                }
        }
```

Wäre super nett, danke

### [#9](https://www.typo3.net/d/33497-suche-mit-1-n-relation/9) · boonkerz · 2005-11-18

Hallo,

Schau mal:

```php
 * Executes a standard SELECT query for listing of records based on standard input vars from the 'browser' ($this->internal['results_at_a_time'] and $this->piVars['pointer']) and 'searchbox' ($this->piVars['sword'] and $this->internal['searchFieldList'])
	 * Set $count to 1 if you wish to get a count(*) query for selecting the number of results.
	 * Notice that the query will use $this->conf['pidList'] and $this->conf['recursive'] to generate a PID list within which to search for records.
	 *
	 * @param	string		The table name to make the query for.
	 * @param	boolean		If set, you will get a "count(*)" query back instead of field selecting
	 * @param	string		Additional WHERE clauses (should be starting with " AND ....")
	 * @param	mixed		If an array, then it must contain the keys "table", "mmtable" and (optionally) "catUidList" defining a table to make a MM-relation to in the query (based on fields uid_local and uid_foreign). If not array, the query will be a plain query looking up data in only one table.
	 * @param	string		If set, this is added as a " GROUP BY ...." part of the query.
	 * @param	string		If set, this is added as a " ORDER BY ...." part of the query. The default is that an ORDER BY clause is made based on $this->internal['orderBy'] and $this->internal['descFlag'] where the orderBy field must be found in $this->internal['orderByList']
	 * @param	string		If set, this is taken as the first part of the query instead of what is created internally. Basically this should be a query starting with "FROM [table] WHERE ... AND ...". The $addWhere clauses and all the other stuff is still added. Only the tables and PID selecting clauses are bypassed. May be depreciated in the future!
	 * @return	pointer		SQL result pointer
	 */
	function pi_exec_query($table,$count=0,$addWhere='',$mm_cat='',$groupBy='',$orderBy='',$query='')	{
```

Ich möchte dir den code nicht vorlegen.
Hier ist mal die Beschreibung der Funktion.
Damit solltest du eigendlich die Query zusammen bauen können durch ein bischen probieren.

Wichtig wäre in deinem Fall:
         * @param       mixed    If an array, then it must contain the keys "table", "mmtable" and (optionally) "catUidList" defining a table to make a MM-relation to in the query (based on fields uid_local and uid_foreign). If not array, the query will be a plain query looking up data in only one table.

### [#10](https://www.typo3.net/d/33497-suche-mit-1-n-relation/10) · suitside · 2005-11-18

das hab ich auch schon probiert, allerdings ohne Erfolg...leider :'(

### [#11](https://www.typo3.net/d/33497-suche-mit-1-n-relation/11) · suitside · 2005-11-18

es funktioniert  :)

zwar etwas anders als geplant und vielleicht nicht so ganz im Sinne des Erfinders aber es tut...yipii

```php
function main($content,$conf)	{
		$this->conf=$conf;
		$this->pi_setPiVarDefaults();
		$this->pi_loadLL();
		$this->pi_USER_INT_obj=1;	// Configuring so caching is not expected. This value means that no cHash params are ever set. We do this, because it's a USER_INT object!

		$content =$this->pi_list_searchBox();
		$content .= $this->piVars[sword]."<br />";
		$sword = $this->piVars[sword];

		if($sword != "") {
			$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM tx_table1, tx_table2 WHERE tx_table2.zip = '.$sword.' AND tx_table2.fieldmanager = tx_table1.uid');

			while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
	    		$content .= $row['name'].'<br />';
			}

  		}

		return $this->pi_wrapInBaseClass($content);
	}
```

über Verbesserungsvorschläge freue ich mich natürlich auch weiterhin ;)

### [#12](https://www.typo3.net/d/33497-suche-mit-1-n-relation/12) · steffenk · 2005-11-18

genau da lande ich auch immer, da mir diese mm-Beziehung von Typo3 völlig schleierhaft ist, vor allem wenn man die Beziehung viel einfacher in SQL formulieren kann.

Für einfache Abfragen geht das ja noch, aber bei komplexeren Joins etc. mach ich mir den SQL lieber selber.

@suitside - ist doch prima wenn es so funktioniert, der Code ist auch viel schlanker und übersichtlicher.

Ich empfehle Dir die extension ExtDevEval, da kannst Du am schnellsten den Syntax nachschauen ( oder forschen )

### [#13](https://www.typo3.net/d/33497-suche-mit-1-n-relation/13) · dfluess · 2007-12-17

Also ich stehe vor dem gleichen Problem. Nur bin ich wahrscheinlich noch erfahrungsärmer was Datenbanken betrifft. Das kommt davon, wenn ein Designer die Arbeit eines DB-Menschen übernehmen muss :o(

In meinem Fall.

Tabelle 1 enthält allgemeine Infos wie Titel und andere Daten.
Tabelle 2 enthält die Postleitzahlen und den Ort.
Ich muss nun eine oder mehrere Postleitzahlen einem Datensatz aus Tabelle 1 zuordnen.

Ich habe also in Tabelle 1 diese Database Relation zu Tabelle 2 gemacht und kann im BE wunderbar die PLZ zuordnen. Aber weiter scheitert es an der Darstellung in der Liste und natürlich der Suche nach der PLZ. Will heißen, statt der PLZ wird nur eine UID ausgegeben.

Nun hab ich versucht Deinen Code zu portieren. Aber mir fehlt leider das Wissen und die Zeit, mich Tagelang mit PHP-Grundwissen herumzuschlagen.

Vielleicht kannst Du mir aber noch ein wenig behilflich sein??

Die Suche soll also anhand der PLZ eine Trefferliste der Datensätze aus Tabelle 1 ausgeben.  Wenn ich dann einen Datensatz auswähle, dann soll’s weiter zur Singl-Ansicht gehen.

Im Moment stehe ich noch mächtig auf dem Schlauch. :(

### [#14](https://www.typo3.net/d/33497-suche-mit-1-n-relation/14) · Stoneage · 2007-12-18

Das hier ist mächtiger:

```php
'SELECT FROM tx_table1 join tx_table2 on tx_table1.uid = tx_table2.fieldmanager WHERE tx_table2.zip = '.addslashes($sword);
```

### [#15](https://www.typo3.net/d/33497-suche-mit-1-n-relation/15) · dfluess · 2007-12-18

ho ho ho ;) wenn man weis damit umzugehen sicher.. Ich dümpele noch im Ansatz mit meinem obigen Problem.

Eine Frage: Gibt’s einen Schalter oder einen anderen Grund, warum ein debug nicht ausgegeben wird? Beispielsweise sollte "debug(array($query));" mir doch den kompletten String ausgeben. Es passiert aber rein gar nichts.

D.

### [#16](https://www.typo3.net/d/33497-suche-mit-1-n-relation/16) · Stoneage · 2007-12-18

```php
'SELECT FROM tx_table1 join tx_table2 on tx_table1.uid = tx_table2.uid WHERE tx_table2.POSTLEITZAHL = '.addslashes($POSTLEITZAHL);
```

### [#17](https://www.typo3.net/d/33497-suche-mit-1-n-relation/17) · dfluess · 2007-12-18

Kann ich überhaupt nix mit anfangen, weil mir das Konstrukt Drumherum fehlt, bzw. noch das aus dem Kickstarter Plugin ist. Das passt mit dem nicht zusammen oder? Ich wüsste nicht  was ich rausschmeißen und hinzufügen muss.

Langsam bezweifele ich, dass ich das dieses Jahr noch hinbekomme. Kommt davon, wenn man jemandem einen Gefallen tun möchte und eigentlich zu wenig Ahnung hat den kompletten Durchblick zu finden. Ich beschäftige mich leider zu selten mit DB-Abfragen.

Eigentlich möchte ich "nur" über das Plugin eine PLZ suchen, die über die Database Relation mit nem Datensatz einer anderen Tabelle verknüpft ist – finden, und mit Klick auf diesen Treffer in der Singl-Ansicht dieses Datensatzes landen. So was bringt ja der Kickstarter schon fast mit, nur halt nicht über eine zweite Tabelle. Wenn doch nur schon Weihnachten währe :'(

### [#18](https://www.typo3.net/d/33497-suche-mit-1-n-relation/18) · Stoneage · 2007-12-19

Wenn Du das in Typo3 mit MM-Tabellen gemacht hast, dann könnte es so funktionieren:

```php
'SELECT FROM tx_table1 JOIN tx_table_MM on tx_table1.uid = tx_table_MM.uid JOIN tx_table2 on tx_table_2.uid = tx_table_MM.pid WHERE tx_table2.POSTLEITZAHL = '.addslashes($POSTLEITZAHL);
```

Wenn Du das ohne Umhängetabelle gemacht hast, dann versuch mal das hier:

```php
'SELECT FROM tx_table1 WHERE tx_table1.uid IN (SELECT MM FROM tx_table2) AND  tx_table2.POSTLEITZAHL = '.addslashes($POSTLEITZAHL);
```

### [#19](https://www.typo3.net/d/33497-suche-mit-1-n-relation/19) · dfluess · 2007-12-19

aha und den String dann in die Variable '$query' schreiben? Damit das Plugin den Standard überschreibt?

Der String sieht super aus und das funktioniert sicher auch. Aber wie "verheirate" ich das mit einem Plugin, dass mit dem Kickstarter erstellt wurde und bereits eine Liste ausgibt?

Auf alle Fälle danke ich Dir für Deine Mühe!

D.

### [#20](https://www.typo3.net/d/33497-suche-mit-1-n-relation/20) · Stoneage · 2007-12-19

> aha und den String dann in die Variable '$query' schreiben? Damit das Plugin den Standard überschreibt?

ja

### [#21](https://www.typo3.net/d/33497-suche-mit-1-n-relation/21) · dfluess · 2007-12-19

naja so einfach $query = ... in die Funktion klatschen ist nicht..

Hab die Version mit der mm Zusatztabelle der Einfachheit halber mal raus genommem und Deinen zweiten Code eingesetzt. Aber ich pack's sicher ganz falsch an... kapier nicht den Zusammenhang mit dem Standardcode im Plugin der die Tabelle aufbaut. Aber ich sehe mittlerweile auch schon den Wald vor lauter Bäumen nicht mehr :(

Hier das hab ich fabriziert ist mein Code

```php
function listView($content, $conf) {
	$myTable = 'tx_dfhsw_versorger'; // altuelle Tabelle 
	$query = $GLOBALS['TYPO3_DB'].'SELECT FROM tx_dfhsw_versorger WHERE tx_dfhsw_versorger.uid IN (SELECT MM FROM  tx_dfhsw_plz) AND   tx_dfhsw_plz.plz = '.addslashes($plz);

	$this->conf = $conf;
// Setting the TypoScript passed to this function in $this->conf
	$this->pi_setPiVarDefaults();
	$this->pi_loadLL();
// Loading the LOCAL_LANG values
	$this->pi_USER_INT_obj = 1; // Configuring so caching is not expected. 
	$lConf = $this->conf['listView.']; // Local settings for the listView function
			 
	if ($this->piVars['showUid']) {
// If a single element should be displayed:
		$this->internal['currentTable'] = $myTable;
		$this->internal['currentRow'] = $this->pi_getRecord($myTable, $this->piVars['showUid']);
				 
		$content = $this->singleView($content, $conf);
		return $content;
	} else {
		if (!isset($this->piVars['pointer'])) $this->piVars['pointer'] = 0;
		if (!isset($this->piVars['mode'])) $this->piVars['mode'] = 1;
		 
// Initializing the query parameters:
		list($this->internal['orderBy'], $this->internal['descFlag']) = explode(':', $this->piVars['sort']);
				 
		$this->internal['results_at_a_time'] = t3lib_div::intInRange($lConf['results_at_a_time'], 0, 1000, 3); // Number of results to show in a listing.
		$this->internal['maxPages'] = t3lib_div::intInRange($lConf['maxPages'], 0, 1000, 2);
// The maximum number of "pages" in the browse-box: "Page 1", 'Page 2', etc.
		$this->internal['searchFieldList'] = 'gv_name,gv_plz,gv_ort,kd_plz';
		$this->internal['orderByList'] = 'gv_name,gv_ort,kd_plz';
				 
// Get number of records:
		$res = $this->pi_exec_query($myTable, 1);
		list($this->internal['res_count']) = $GLOBALS['TYPO3_DB']->sql_fetch_row($res);
				 
// Make listing query, pass query to SQL database:
		$res = $this->pi_exec_query($myTable);
		$this->internal['currentTable'] = $myTable;
				 
// Put the whole list together:
		$fullTable = ''; // Clear var;
// Adds the whole list table
		$fullTable .= $this->pi_list_makelist($res);
// Adds the search box:
		$fullTable .= $this->pi_list_searchBox();
// Adds the result browser:
		$fullTable .= $this->pi_list_browseresults();
// Returns the content from the plugin.
		return $fullTable;
	}
}
```

Wenn Du nochmal dazu was sagen möchtest, dann freue ich mich. Wenn nicht, dann muss ich andere Wege suchen, dass ganze fängt nämlich langsam mächtig an zu nerven.. aber habs leider versprochen :(

### [#22](https://www.typo3.net/d/33497-suche-mit-1-n-relation/22) · dfluess · 2007-12-19

Kleiner Nachtrag,

Kaspers Video Funktioniert schon. Hab ich gerade festgestellt! Allerdings wird dieser ausgetauschte Wert nicht mit in die Suche einbezogen, da 'searchFieldList' ja nur den Ursprungswert, also  die UID sieht.

Na ganz toll und sobald mehrere Datensätze zugeordnet sind, wird auch nix mehr ausgegeben.. Da muss dann wohl sowas wie ne schleife mit rein. Aber es geht mir ja eigentlich nicht um die Ausgabe der PLZ sondern das der Datensatz gezeigt wird, wenn eine PLZ über die Suche gefunden wird.

### [#23](https://www.typo3.net/d/33497-suche-mit-1-n-relation/23) · Stoneage · 2007-12-19

Naja, ich habe ja angefangen mit MÄCHTIGEN SQL-Queries. Hab' auch keine Lust Dich auf eine falsche Fährte zu locken. Den Unterschied zwischen Where und Join kann man ungefähr so beschreiben:

Vor Ergebnis her sind beide Abfrage-Alternativen gleichwertig, aber die SQL92-Fassung ist für Dritte besser lesbar:

* Die beteiligten Tabellen werden über die JOIN-Anweisung bereits in der richtigen Reihenfolge benannt, wobei die Abhängigkeiten über die ON-Klausel direkt der JOIN-Anweisung zugeordnet werden.
    * Die WHERE-Klausel enthält nur noch die Einschränkungen der Ergebnismenge, aber nicht mehr zusätzlich die Beziehungen der Tabellen untereinander.

Außerdem kann es nur bei der alten SQL89-Schreibweise aus Versehen zu einem kartesischen Produkt kommen, wenn im WHERE-Abschnitt eine Beziehung vergessen wird. Bei der SQL 92-Syntax meldet sich der SQL Server beim Ausführen einer unvollständigen SELECT-Anweisung sofort mit einem Veto zu Wort, da die im Hintergrund ablaufende Syntaxprüfung den Fehler sofort entdeckt. Wenn das kartesische Produkt tatsächlich benötigt wird, muss dies in der SQL92-Fassung explizit über CROSS JOIN angefordert werden.

### [#24](https://www.typo3.net/d/33497-suche-mit-1-n-relation/24) · dfluess · 2007-12-20

Hi nochmal.
Ich hab noch immer nicht hinbekommen, dass die PLZ der zweiten Tabelle mit in die Suche einbezogen wird.

Was ist denn an diesem String falsch?

```php
		$query = 'SELECT * FROM tx_dfhsw_versorger JOIN tx_dfhsw_versorger_kd_plz_mm on tx_dfhsw_versorger.uid = tx_dfhsw_versorger_kd_plz_MM.uid JOIN tx_dfhsw_plz on tx_dfhsw_plz.uid = tx_dfhsw_versorger_kd_plz_MM.pid WHERE tx_dfhsw_plz.PLZ = '.addslashes($PLZ);
```

Ich bekomme die debug-Meldung:

aller	t3lib_DB::sql

ERROR	Fehler in der Syntax bei '' in Zeile 1.

lastBuiltQuery	SELECT * FROM tx_dfhsw_versorger JOIN tx_dfhsw_versorger_kd_plz_mm on tx_dfhsw_versorger.uid = tx_dfhsw_versorger_kd_plz_MM.uid JOIN tx_dfhsw_plz on tx_dfhsw_plz.uid = tx_dfhsw_versorger_kd_plz_MM.pid WHERE tx_dfhsw_plz.PLZ =

debug_backtrace	ux_tslib_fe->intincscript // ux_ux_tslib_cobj->user // ux_ux_tslib_cobj->calluserfunction // call_user_method // tx_dfhsw_pi1->main // tx_dfhsw_pi1->listview // t3lib_db->sql // t3lib_db->debug

### [#25](https://www.typo3.net/d/33497-suche-mit-1-n-relation/25) · Stoneage · 2007-12-21

Mir ist gerade aufgefallen, dass Du wegen dieser Frage schon 3 Threads aufgemacht hast.

[/d/71690-standard-listenansicht-im-plugin-erweitern](https://www.typo3.net/d/71690-standard-listenansicht-im-plugin-erweitern)
[/d/71611-variable-aus-plugin-an-marker-uebergeben](https://www.typo3.net/d/71611-variable-aus-plugin-an-marker-uebergeben)
und diesen hier.

Das macht man nicht.

Und man rennt auch nicht hinter jedem her der eine potenzielle Antwort hat. Just2b wollte Dir schon helfen. Dann machst Du einfach noch ein Thread auf. Kannst nicht auf eine Antwort warten, bzw. kriegst auch keine. Und in einem anderen Thread fängst Du an mit mir darüber zu diskutieren. Das macht man auch nicht.

Nun nochmal zu Deiner Frage: Das ist Standart-Sql. Mir fällt da nichts auf.
Siehe: <http://www.spotlight-wissen.de/lisp/pages/messages/asql-1108551613-3649>

### [#26](https://www.typo3.net/d/33497-suche-mit-1-n-relation/26) · dfluess · 2007-12-21

@Tetramatrix Ach kannst Du bitte Deinen Oberlehrer nicht so raushängen lassen??! Du magst ja im Ansatz Recht haben aber 1. habe ich nicht 3 Threads mit dem gleichen Thema aufgemacht und 2. mache ich nur das in einem Forum, wozu ein Forum auch da ist, Fragen und nachhaken und wenns sein muss auch öfter. Denn ich hab festgestellt, so mancher Thread landet mit 0 Antworten in der Versenkung, wenn man hier nicht nachhakt. Wenn keiner Probleme hätte, dann wäre das hier wohl nicht notwendig oder? Ein Forum ist nicht zum Schulterklopfen da.

Den ersten Thread habe ich nach zunächst erfolgloser Suche zum Thema aufgemacht. Der zweite galt einem ganz anderen Problem, ergab sich nur im Verlauf, dass ich auch da (sorry) die Frage angeschlossen hatte. Den dritten Thread habe ich nicht aufgemacht, sondern zu diesem Thema zufällig und erst später gefunden.

Also bitte, was soll diese Wichtigtuerei! Du magst ja sehr fähig sein, hast Deine Stärken da, wo ich meine woanders habe. Hinter rennen tu ich aber niemanden, bin ich schon längst keine 30 mehr ;)

Aber das soll jetzt keine Rechtfertigung sein! Ich werde wahrscheinlich noch öfter, vielleicht intensiver nachhaken wenns sein muss. Es steht ja jedem frei zu Antworten. Und es mach ja auch immer der Ton die Musik.

Trotzdem Danke ich für jede Antwort.

Frohe Feiertage, D.

### [#27](https://www.typo3.net/d/33497-suche-mit-1-n-relation/27) · dfluess · 2007-12-28

Ich habe es nun endlich hinbekommen.
Meine Liste wird durch eine eigene from_table und where_clause ordendlich durchsucht. Jetzt kommen die Schönheitsoperationen. Z.B. möchte ich nicht, das bei Aufruf des Plugin alle Datensätze angezeigt werden. Treffer sollen nur bei Ünereinstimmung ausgegeben werden. Weiter soll ein Hinweistext erscheinen, wenn KEIN Treffer gefunden wurde. Auch funktioniert die Result-Anzeige so nicht. Weiss jemand Rat?

Hier mal mein Code. Vielleicht hilfts auch anderen.

D.

```php
function listView($content, $conf) {
	$this->conf = $conf;
	$this->pi_setPiVarDefaults();
	$this->pi_loadLL(); 
	$this->pi_USER_INT_obj = 1; 
	$lConf = $this->conf['listView.']; 
	 
	if ($this->piVars['showUid']) {
		$this->internal['currentTable'] = 'tx_dfhsw_versorger';
		$this->internal['currentRow'] = $this->pi_getRecord('tx_dfhsw_versorger', $this->piVars['showUid']);
		 
		$content = $this->singleView($content, $conf);
		return $content;
	} else {
		if (!isset($this->piVars['pointer'])) $this->piVars['pointer'] = 0;
		if (!isset($this->piVars['mode'])) $this->piVars['mode'] = 1;
		 
		list($this->internal['orderBy'], $this->internal['descFlag']) = explode(':', $this->piVars['sort']);
		
		# NEU #############################################################################				 
		 
		$SuchText = $this->piVars['sword'];
		$select_fields = 'tx_dfhsw_versorger.*';
		$from_table = '(tx_dfhsw_versorger INNER JOIN tx_dfhsw_versorger_kd_plz_mm ON tx_dfhsw_versorger.uid = tx_dfhsw_versorger_kd_plz_mm.uid_local)
			INNER JOIN tx_dfhsw_plz ON tx_dfhsw_versorger_kd_plz_mm.uid_foreign = tx_dfhsw_plz.uid';
		$where_clause = "(tx_dfhsw_plz.plz Like '%".$SuchText."%'".$this->cObj->enableFields('tx_dfhsw_versorger').')';
		$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields, $from_table, $where_clause, $groupBy = ''.$orderBy = ''.$limit = '');
		
		##############################################################################				 				
		 
		$this->internal['results_at_a_time'] = t3lib_div::intInRange($lConf['results_at_a_time'], 0, 1000, 3);
		$this->internal['maxPages'] = t3lib_div::intInRange($lConf['maxPages'], 0, 1000, 2);
		 
		$fullTable = '';
		$fullTable .= $this->pi_list_searchBox();
		$fullTable .= $this->pi_list_makelist($res);
		$fullTable .= $this->pi_list_browseresults(); // geht nicht :(

		return $fullTable;
	}
}
```

---

Quelle: „Suche mit 1-N Relation“, typo3.net, https://www.typo3.net/d/33497-suche-mit-1-n-relation
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
