Mailinglisten-Archive |
Konstantin Rekk schrieb: > Zeilen mit hilfe einer Stringfunktion (+) zusammenfassen, in etwas so: [...] > die Ausgabe sollte autoren gleicher Dokumente zusammengefasst liefern: > > 1 olaf,gudrun > 2 jesus > 3 n.n. > > irgendwie sehe ich nicht wie man das ohne Benutzung von > stored_procedures o.ä. machen könnte, nur mit "standard"-sql. Mit Standard-SQL geht es auch nicht, weil es keine mehrwertigen Attribute kennt (und obiges ist ja nicht kein Einzelwert, sondern eine Liste von mehreren Autoren). Man könnte sich zwar eine Aggregatsfunktion vorstellen, die - ähnlich wie SUM() für Zahlen - Zeichenketten in einer irgendwie festgelegeten Reihenfolge aneinanderkettet, aber leider gibt's sowas in Standard-SQL auch nicht. Die beste Lösung ist meistens, die SQL-Abfrage einfach zu halten und die Zusammenfassung im Programm zu machen! Mit PHP und MySQL sieht das skizziert etwa so aus (da fehlen jetzt noch alle Fehlerprüfungen!): $rc = mysql_query('SELECT dok_id, name FROM Author ORDER BY name'); while ($row = mysql_fetch_assoc($rc)) { $author[$row['dok_id']][] = $row['name']; } foreach ($author as $i=>$a) { printf("%s: %s\n", $i, join(', ', $a) ); } Wenn die Zusammenfassung wirklich und unbedingt schon gleich mit der SQL-Query passieren soll, geht mit Standard-SQL nur eine Lösung mit fester Maximalzahl von Autoren pro Titel, hier im Beispiel max. 3 Autoren: SELECT d1.dok_id, CONCAT_WS(", ",d1.author,d2.author,d3.author) AS authors FROM d AS d1 LEFT JOIN d AS d2 ON ( d1.dok_id=d2.dok_id AND d1.author<d2.author ) LEFT JOIN d AS d3 ON ( d2.dok_id=d3.dok_id and d2.author<d3.author ); Ich hoffe, das hilft weiter ... Ciao, Martin
php::bar PHP Wiki - Listenarchive