Spezielle Gruppierung

CodexX

Grünschnabel
hi,

ich habe 3 tabellen:
kunde, produkt, bestellung

bestellung enthält unter anderem die kundenid und die produkt id. (bei einer bestellung kann nur ein produkt gekauft werden.)
kauft der kunde noch einen zweiten artikel, ist dies eine gesodnerte bestellung.

wenn ich nun eine tabelle ausgeben möchte, in der für jeden kunden eine zeile vorhanden ist, alle seine daten eine eigene spalte bekommen, die gekauften produkte aber alle in ein tabellenfeld durch komma getrennt rein sollen, scheitere ich.

ich kürze mal den code auf die wichtigsten bestandteile zusammen (uA fehlen auch die html tabellen tags):
PHP:
$dbanfrage = 
"SELECT * FROM kunde INNER JOIN bestellung ON kunde.KID = bestellung.KID INNER JOIN produkt ON produkt.PID = bestellung.PID";

...

while ($ausgabe = mysql_fetch_array ($result))
 {$ausgabe[KID]
$ausgabe[Nachname]
$ausgabe[Produktbezeichnung]}

damit erhalte ich in etwa:
Code:
1 Name1 Produkt1
1 Name1 Produkt2
2 Name2 Produkt1
3 Name3 Produkt1
3 Name3 Produkt4

mit "GROUP BY kunde.KID" kommt:
Code:
1 Name1 Produkt1
2 Name2 Produkt1
3 Name3 Produkt1

ich hätte aber gerne:
Code:
1 Name1 Produkt1, Produkt2
2 Name2 Produkt1
3 Name3 Produkt1, Produkt4

wie lässt sich das realisieren?

besten dank und nächtlichen gruß
 
Zuletzt bearbeitet:
Hi,

das läßt sich so nicht realisieren. Außer über nested Selects, aber ich weiß nicht, ob mysql, die mittlerweile beherscht. Ansonsten musst Du halt über zwei Schleifen laufen. In der ersten selektierts Du deinen Kunden und in der zweiten dessen gekaufte Produkte.

shockshell
 
*shokshell zustimm*

wie lässt sich das realisieren?

so:

PHP:
$dbanfrage = "SELECT * FROM kunde";

$result = mysql_query($dbanfrage);

while ($ausgabe = mysql_fetch_array ($result)) 
{
$ausgabe[KID] 
$ausgabe[Nachname] 

$dbanfrage2 = "SELECT * FROM bestellung WHERE KID = ".$ausgabe[KID];
$result2 = mysql_query($dbanfrage2);
$anz = mysql_num_rows($result2);
$cnt = 0;
while($produkt = mysql_fetch_array($result2)
{
 $cnt++;
 $bez .= ($cnt == $anz) ? $ausgabe[Produktbezeichnung] : $ausgabe[Produktbezeichnung].", ";;
}
}

so in etwa... vom Prinzip her.
 
ok, schade, dass es nicht direkt geht, aber das mit der zweiten abfrage+schleife geht ja auch als notlösung.

danke
 
nimm die erste Abrage und Überprüfe bei der Ausgabe, ob der vorherige Datensatz die gleiche KundenID hat und wenn ja, dann halt mit "," dran hängen
PHP:
$dbanfrage =
"SELECT * FROM kunde INNER JOIN bestellung ON kunde.KID = bestellung.KID INNER JOIN produkt ON produkt.PID = bestellung.PID"; 

$result = mysql_query($dbanfrage);
echo '<table>';
$anzahl=mysql_num_rows();
$i=1;
$kid=0;
while ($ausgabe = mysql_fetch_array ($result))
{
      if($kid != $ausgabe['KID'])
      {
         if($kid!=0) echo "</td></tr>";
         echo "<tr><td>".$ausgabe['Kundenname']."</td><td>".$ausgabe['Produkt'];
      }else{
         echo ", ".$ausgabe['Produkt'];
      }
      if($i==$anzahl) echo "</td></tr>";
      $i++
      $kid = $ausgabe['KID'];
} 
echo '</table>';
müsste gehen
flooo
 
Zuletzt bearbeitet:
Zurück