GROUP BY trotzdem alle Namen ausgeben

quidnovi

Erfahrenes Mitglied
Hi @ all,

in meiner Mysql Db habe ich folgende Einträge:

2008-03-17 | Mair | 5h
2008-03-18 | Huber | 2h
2008-03-18 | Hilber | 1h
2008-03-18 | Kopp | 1h

So, nun sollte ich folgende Ausgabe erreichen:
2008-03-17 | Mair | 5h
2008-03-18 | Hilber, Huber, Kopp | 4h

Mit folgender Ausgabe erreiche ich "nur" folgendes:
PHP:
$sql = "SELECT *, ".
			       "SUM(hDiaeten) AS 'summeDiaeten' ".
				   "FROM ".$abrechnung." ".
				   "WHERE persNr = ".$_GET['persNr']." ".
				   "AND diaeten = '1'".
				   "AND monat = '".$_GET['monat']."' ".
				   "GROUP BY `datTag` ".
			       "ORDER BY `datTag` ASC";
			$res = mysql_query($sql) or die (mysql_errno() . ": Keine Verbindung zu \"$abrechnung\"! " . mysql_error()."<p />".$sql);

while($row = mysql_fetch_assoc($res)) {
				$array[] = $row['datTag']."_".$row['auftragsNr']."_".$row['kundenname']."_".$row['summeDiaeten'];
			}
			if($array){
				foreach($array as $item){
					$ausgabe = explode("_",$item);
					$monatsleistung = sprintf("%01.2f",$ausgabe[3] * 2.2);
					echo "<tr align='center'><td>".$ausgabe[0]."</td>".
						 "<td>".$ausgabe[2]."</td>".
						 "<td>".ueBereinigen($ausgabe[3])."</td>".
						 "<td> EUR ".str_replace(".",",",$monatsleistung)."</td></tr>";
				}
			}

Die Ausgabe:
2008-03-17 | Mair | 5 | EUR 11,00
2008-03-18 | Hilber | 4 | EUR 8,80

Wie man sieht, sind die Ergebnisse die richtigen, nur brauche ich am 18.3.2008 alle drei Namen und nicht nur einen (Hilber).

Wie schaffe ich es nun, alle drei Namen auszugeben?

Könnt Ihr mir bitte helfen? Danke
 
Dafür gibts die Funktion GROUP_CONCAT:

SQL:
SELECT datTag, GROUP_CONCAT(kundenname SEPARATOR ",") AS kundennamen, SUM(hDiaeten) AS summeDiaeten
FROM Abrechnung
WHERE ...
GROUP BY datTag
ORDER BY datTag ASC

In dem Fall kannst du das SEPARATOR "," auch weglassen, da standardmäsig das Komma genommen wird. Nur falls du einen anderen Trenner brauchst hab ich der vollständigkeit halber das eingefügt.

Gruss
olqs
 
Hi olqs,

spitze, danke, funktioniert bestens!

Muss nun zu meiner Schande gestehen, dass mir das "GROUP_CONTACT" gänzlich unbekannt ist/war.

Habe jetzt ein wenig gegooglt, finde aber nicht das, wonach ich suche, daher habe ich nun noch eine Bitte, bzw. Frage: Gibt es im Netz irgendwo sowas wie ein Sammelsurium, betreffend SQL Statements?

Danke nochmal
quidnovi
 
So, jetzt habe ich folgendes Problem:

Das mit GROUP_CONTACT funktioniert erst ab der Version 4.1, habe aber auf dem Server
MySQL - 4.0.27

Welchen Befehl kann ich statt dessen verwenden?

Bitte dringend um Hilfe, da das Ganze eigentlich schon läuft. Danke
 
Habe im Netz etwas gefunden, das wie folgt aussieht:
PHP:
$sql = "SELECT *, ".
				   //"datTag, GROUP_CONCAT(kundenname SEPARATOR ', ') AS kundennamen, ". Version ab 4.1.19
				   "GROUP_CONCAT(DISTINCT kundenname ORDER BY kundenname) ". // für Version 4.0.27
			       "SUM(hDiaeten) AS 'summeDiaeten' ".
				   "FROM ".$abrechnung." ".
				   "WHERE persNr = ".$_GET['persNr']." ".
				   "AND diaeten = '1'".
				   "AND monat = '".$_GET['monat']."' ".
				   "GROUP BY `datTag` ".
			       "ORDER BY `datTag` ASC";

Der Tabellentyp ist "TEXT", daher sollte es funktionieren.

Was ist bei diesem Befehl:
PHP:
"GROUP_CONCAT(DISTINCT kundenname ORDER BY kundenname) ". // für Version 4.0.27

falsch? Bitte helft mir, danke
 
Zuletzt bearbeitet:
Zurück