---
title: "SQL Abfrage innerhalb einer while Schleife"
url: "https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2008-02-16"
last_reply: "2008-02-18"
replies: 6
solved: false
page: 1
pages: 1
lang: "de"
---

# SQL Abfrage innerhalb einer while Schleife

Extensions › Entwicklung · 6 Antworten · gestartet 2008-02-16

## Eröffnungsbeitrag

**konkret** · 2008-02-16 · [Beitrag #1](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/1)

Hallo,

Möchte einen Datensatz aus der Tabelle 1 auslesen und in der Tabelle 2 nach dazugehörigen Datensätzen über den Primärschlüssel aus Tabelle 1 suchen.

Die Datensätze aus Tabelle 2 sollen dann untereinander nach dem Datensatz aus Tabelle 1 angezeigt werden.

Anschließend soll der nächste Datensatz aus Tabelle 1 ausgelesen werden, für den dann wieder die zugehörigen Datensätze aus Tabelle 2 ausgegeben werden sollen, usw. bis alle Datensätze aus Tabelle 1 abgearbeitet wurden.

Soll ca. so aussehen:
     Datensatz Tab 1-1
          Datensatz Tab 2-1-1
          Datensatz Tab 2-1-2
     Datensatz Tab 1-2
          Datensatz Tab 2-2-1
          Datensatz Tab 2-2-2
          Datensatz Tab 2-2-3
     usw...

Habs mal so probiert, funzt aber nicht so richtig?
Kann mir da vielleicht wer weiter helfen?

```php
<?php	 
$storage_pid = $GLOBALS['TSFE']->id;
$t1 = 'table_1';
$t2 = 'table_2';
       
        #Auslesen der Daten aus Tabelle 1
	$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM '.$t1.'
                 WHERE '.$t1.'.pid = '.$storage_pid.' 
                 AND '.$t1.'.hidden = 0
                 ORDER BY '.$t1.'.crdate DESC');

	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        # Auslesen des Primärschlüssels des jeweiligen Datensatzes          	
	      $uid = $row['uid'];

	# Anzeigen der dazugehörigen Datensätze aus Tabelle 2, durch
        # übereinstimmung mit Primärschlüssel Tabelle 1
	      $res_com = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM                        
                  '.$t1.','.$t2.' 
	          WHERE '.$uid.' = '.$t2.'.cid_com 
	          AND '.$t2.'.hidden_com = 0
                  ORDER BY '.$t2.'.crdate_com DESC');

	      while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res_com)) {
	      
              # Hier Ausgabe aller Datensätze die übereinstimmen
	      
              }
	
        # Einfügen ins Template	
        $content_item .=
        $this->cObj->substituteMarkerArrayCached($template["item"],
          $markerArray, array(), array());
        
        }
?>
```

mfg konkret

## Antworten

### [#2](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/2) · einpraegsam.​net · 2008-02-16

Das müsste doch eigentlich über einen JOIN einfacher funktionieren?

### [#3](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/3) · Stoneage · 2008-02-16

Eigentlich schon.

### [#4](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/4) · konkret · 2008-02-16

So, habs mal mit JOIN versucht, klappt auch ganz gut bis auf:
Die Daten werden jetzt so angezeigt:

Datensatz 1-1
 Datensatz 2-1-1
Datensatz 1-1
 Datensatz 2-1-2
Datensatz 1-1
 Datensatz 2-1-3
Datensatz 1-2
Datensatz 1-3
usw...

Also immer der eine Datensatz zwischen den zugehörigena aus Tabelle 2, möchte es aber eben so haben:

Datensatz 1-1
 Datensatz 2-1-1
 Datensatz 2-1-2
 Datensatz 2-1-3
Datensatz 1-2
Datensatz 1-3
usw...

Mein SQL Befehl, jetzt mit nur einer while Schleife:

```php
<?php
        $te = 'tabelle_1';
        $tc = 'tabelle_2'; 
        $res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM '.$te.'
		LEFT OUTER JOIN '.$tc.' 
		ON '.$te.'.uid = '.$tc.'.cid_com 
	        AND '.$te.'.pid = '.$storage_pid.'
		AND '.$te.'.hidden = 0
		ORDER BY '.$te.'.crdate DESC, '.$tc.'.crdate_com DESC');
	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        #Daten ins Template einfüllen
        }
?>
```

### [#5](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/5) · Stoneage · 2008-02-16

Probier mal INNER JOIN.

### [#6](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/6) · konkret · 2008-02-17

INNER JOIN geht nicht, denn dann nimmt er nur Datensätze die Entsprechungen in beiden Tabellen haben, deshalb LEFT OUTER JOIN.

Habs jetzt folgendermaßen gelöst:

```php
<?php
$te = 'tabelle1';
$tc = 'tabelle2';       
        
        $res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM '.$te.'
			LEFT OUTER JOIN '.$tc.' 
			ON '.$te.'.uid = '.$tc.'.cid_com 
			AND '.$te.'.pid = '.$storage_pid.'
                        AND '.$te.'.hidden = 0
			ORDER BY '.$te.'.crdate DESC, '.$tc.'.crdate_com DESC
			LIMIT '.$start.','.$entries_site);
	while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
            
            # ID zu Beginn auslesen und in der if Abfrgae mit vorhergehender ID vergleichen          	
            $check_start = $row['uid'];
            
            # Überprüfen ob der Datensatz schon einmal ausgelesen wurde
		   if ($check_start == $check_end) {
                        #Dann leere Marker setzen
			$markerArray['###XYZ###'] = '';
		   } else {
                        #Sonst Marker füllen
			$markerArray['###XYZ###'] = '...'
		   }
            # Anzeigen der zugehörigen Unterdatensätze
            # Wenn eine übereinstimmung mit dem übergeordneten vorhanden ist
            # Dann Marker auffüllen
	          if ($row['cid_com'] == $row['uid']) {
		       $markerArray['###XYZ###'] = '...'
                       # Sonst leer lassen
                  } else {
                       $markerArray['###XYZ###'] = '';
                  } 
            
            # ID auslesen und bei nächstem Durchgang mit neuer ID vergleichen
            $check_end = $row['uid'];		
	
            # Einfügen des Content
            $content_item .=  
            $this->cObj->substituteMarkerArrayCached($template["item"], 
            $markerArray, array(), array());
        }

?>
```

mfg konkret

### [#7](https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife/7) · einpraegsam.​net · 2008-02-18

> **konkret schrieb:**
>
> So, habs mal mit JOIN versucht, klappt auch ganz gut bis auf:
> Die Daten werden jetzt so angezeigt:
>
> Datensatz 1-1
>  Datensatz 2-1-1
> Datensatz 1-1
>  Datensatz 2-1-2
> Datensatz 1-1
>  Datensatz 2-1-3
> Datensatz 1-2
> Datensatz 1-3
> usw...
>
> Also immer der eine Datensatz zwischen den zugehörigena aus Tabelle 2, möchte es aber eben so haben:
>
> Datensatz 1-1
>  Datensatz 2-1-1
>  Datensatz 2-1-2
>  Datensatz 2-1-3
> Datensatz 1-2
> Datensatz 1-3
> usw...

GROUP BY ??

---

Quelle: „SQL Abfrage innerhalb einer while Schleife“, typo3.net, https://www.typo3.net/d/73771-sql-abfrage-innerhalb-einer-while-schleife
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
