MySQL-Query Result zusammenführen...

thing

Mitglied
Moin...

Ich habe drei MySQL Tabellen (vereinfacht):

Tabelle project:
Code:
id
title
Tabelle user:
Code:
id
username
Tabelle responsible:
Code:
user_id
project_id
Die Inhalte könnten zum Beispiel so aussehen:

Tabelle project:
Code:
id > 1
title > tolles projekt
--
id > 2
title > tolleres projekt
Tabelle user:
Code:
id > 1
username > thing
--
id > 2
username > lala
Tabelle responsible:
Code:
user_id > 1
project_id > 1
--
user_id > 2
project_id > 1
--
user_id > 2
project_id > 2
Dargestellt werden soll damit, dass Benutzer 1 für das Projekt 1 und Benutzer 2 für die Projekte 1 und 2 verantwortlich ist. In PHP frage ich das jetzt mit folgendem Query ab:
PHP:
$result = mysql_query("SELECT project.id,project.title,user.username FROM project,responsible,user WHERE responsible.project_id = project.id AND user.id = responsible.user_id ORDER BY project.id ASC",$mysql_id);
So weit so gut, aber ich komme mit dem was ich als Output bekomme nicht klar:
PHP:
while ($row[] = mysql_fetch_array($result,MYSQL_ASSOC)) {}
gibt mir als Output ein solches Array zurück:
Code:
[0] => Array (
    [id] => 1
    [title] => tolles projekt
    [username] => thing
)
[1] => Array (
    [id] => 1
    [title] => tolles projekt
    [username] => lala
)
[3] => Array (
    [id] => 2
    [title] => noch tolleres projekt
    [username] => lala
)
was also so viel bedeutet wie das ich für jede mögliche Kombination von Username zu Projekt (die sich aus der Tabelle responsible ergibt) einen Eintrag in meinem Result-Array bekomme. Verstehen tue ich ja warum PHP das so macht (finde ich ja auch mehr oder weniger gut) aber wie soll ich damit umgehen um die einzelnen Projekte vernünftig ausgeben zu können ? Also für jedes Projekt beispielsweise eine Tabelle mit allen Informationen (incl. der Usernamen aller an dem Projekt beteiligten Personen) ?

Wäre schön wenn mir mal jemand helfen könnte :-) !

Gruß thing
 
Hallo, wenn Du nur die Informationen zu EINEM Projekt auslesen möchtest, dann kannst Du in der WHERE-Klausel beispielsweise "AND project.id = 1" hinzufügen und daraus die Tabelle erzeugen.

Wenn Du alle Daten ausliest (wie in Deinem Beispiel), dann kannst Du prüfen, ob sich die ID des Projektes ändert. Wenn ja, dann wird begonnen eine neue Tabelle anzulegen.

Hier ein Beispiel für die "Gruppierung" der Daten nach Projekten:
PHP:
$sql = "SELECT project.id,project.title,user.username
        FROM project,responsible,user
        WHERE responsible.project_id = project.id
          AND user.id = responsible.user_id
        ORDER BY project.id ASC";

$result = mysql_query($sql, $mysql_id);

while ($row[] = mysql_fetch_array($result,MYSQL_ASSOC)) {}

for ($x = 0; $x < count($row); $x++) {
  if ($lastProjectID != $row[$x]['id']) {
    if ($x != 0) { // Begonnene Tabelle beenden (Wenn nicht 1. Datensatz)
      $html .= "</td></tr></table>";
    }
    $html .= "<table><tr><td>Projekt: ".$row[$x]['title']."</td></tr><tr><td>";
  }
  $html .= "<br>".$row[$x]['username'];
  
  if ($x+1 == count($row)) {$html .= "</td></tr></table>";}

  $lastProjectID = $row[$x]['id'];
}

echo $html;

mfg, snuu
 
Moin !

Jo danke so funktionierts... Ich hatte nur gehofft, das man sich den Aufwand mit der while-Schleife sparen könnte indem man alles in dem MySQL Query erledigt (mit irgendwelchen GROUP-Funktionen).

Gruß thing
 
Zurück