Paco: DISTINCT, GROUP BY oder Unterabfragen?

Hallo!
Ich habe ein kleines MySQL-Verständnisproblem..

Die Tabelle (dispo)  aus der ich Selektieren möchte sieht folgendermaßen aus:

projekt   +   aufgabe   +   empfaenger
----------+-------------+---------------
projekt 1 +   lesen     +   heinz
----------+-------------+---------------
projekt 2 +   malen     +   egal
----------+-------------+---------------
projekt 3 +  schreiben  +   peter
----------+-------------+---------------
projekt 1 +  rechnen    +   paul
----------+-------------+---------------
projekt 3 +  singen     +   kurt

Abfrage:
SELECT projekt, aufgabe, empfaenger FROM dispo.

Ich möchte nun eine Ausgabe a la

projekt1:
 -lesen heinz
 -rechnen paul
projekt2:
 -malen egal
projekt3:
 -schreiben peter
 -singen kurt

erreichen. Weiß allerdings nicht wie ich das zustande bringe. Wenn ich das SELECT mit DISTINCT einschränke (SELECT DISTINCT projekt), bekomm ich ja auch nur aufgabe und empfaenger von einem Datensatz.

Mit GROUP BY ist es ja im Prinzip auch nichts anderes.
Geht das mit Unterabfragen einfach (und wenn ja, wie?)?

Oder macht man das am besten bei der Ausgabe mit PHP?

Ach ja, ich benutze MySQL 5.1 und PHP5.

tausend Dank schonmal,

Paco

  1. Hallo Paco,

    probier doch ersteinmal ein
    ORDER BY projekt
    dadurch erhälst Du alle Zeilen sortiert nach Projekten.
    Dann kannst Du die Zeilen mit PHP auslesen und Dir immer den zuletzt gelesenen Projektnamen merken. Sobald der aktuelle anders ist als der letzte, beginnt eine neue Ausgabe der zum Projekt zugehörigen Konfigurationen.

    Beispiel-Code:

      
    $query='SELECT projekt,aufgabe,empfaenger from tabelle order by projekt asc';  
    $aktuelles_projekt='';  
    $result = mysql_query($query);  
    while ($aktuelle_zeile=mysql_fetch_row($result))  
    {  
      if ($aktuelles_projekt!=$aktuelle_zeile[0])  
      {  
         echo "Projekt: $aktuelle_zeile[0]<br>";  
         $aktuelles_projekt=$aktuelle_zeile[0];  
      }  
       echo "   $aktuelle_zeile[1] - $aktuelle_zeile[2]<br>";  
      
    }  
    
    

    Gruß,
    the-FoX

    1. Danke Fox,
      das funktioniert und sieht schon mal sehr gut aus, auch wenn ich das jetzt erstmal nachvollziehen muß ;-)

      Hallo Paco,

      probier doch ersteinmal ein
      ORDER BY projekt
      dadurch erhälst Du alle Zeilen sortiert nach Projekten.
      Dann kannst Du die Zeilen mit PHP auslesen und Dir immer den zuletzt gelesenen Projektnamen merken. Sobald der aktuelle anders ist als der letzte, beginnt eine neue Ausgabe der zum Projekt zugehörigen Konfigurationen.

      Beispiel-Code:

      $query='SELECT projekt,aufgabe,empfaenger from tabelle order by projekt asc';
      $aktuelles_projekt='';
      $result = mysql_query($query);
      while ($aktuelle_zeile=mysql_fetch_row($result))
      {
        if ($aktuelles_projekt!=$aktuelle_zeile[0])
        {
           echo "Projekt: $aktuelle_zeile[0]<br>";
           $aktuelles_projekt=$aktuelle_zeile[0];
        }
         echo "   $aktuelle_zeile[1] - $aktuelle_zeile[2]<br>";

      }

      
      >   
      >   
      > Gruß,  
      > the-FoX  
      >   
      >