Aneinanderreihen von einzelnen Zellen in eine Tabellenspalte
calibaba
- datenbank
Hallo, ich habe viel gesucht und dennoch nix gefunden was mir weiterhilft.
Evtl hat einer von euch ja ne Idee.
****************************************
MySQL-Client-Version: 5.0.51b
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
PHP Version 5.2.6
****************************************
Es gibt 1 Tabelle.
Tabelle 1 hat zB vollgende Daten:
id kategorie inhalt preis benutzer
1 A tusche 12Eur Müller
2 B filz 10Eur Schmidt
3 A band 8Eur
4 A kleber 4Eur Meier
Ich möchte gern wissen wie ich eine Abfrage starten kann wobei mir die Benutzer mittels ';' getrennt in eine Spalte in einer Tabelle ausgegeben werden.
Es soll am Ende so aussehen:
Kategorie A erbrachte 16Eur Einnahmen durch: Müller; Meier
Kategorie B erbrachte 10Eur Einnahmen durch: Schmidt
Das zusammenziehen der Kategorieen und das Summieren der Preise ist kein Hit, das funktioniert. Aber mit den Namen das man die aneinanderreihen kann bekomm ich noch nicht hin.
Ich würd mich freuen wenn mir da jemand helfen kann.
Grüße
Aber mit den Namen das man die aneinanderreihen kann bekomm ich noch nicht hin.
CONCAT_WS() wird dich vermutlich zum ziel bringen
CONCAT_WS() wird dich vermutlich zum ziel bringen
Leider nein, wenn ich das mache seh ich in der Ausgabe nur das ';'
yo,
CONCAT_WS() wird dich vermutlich zum ziel bringen
Leider nein, wenn ich das mache seh ich in der Ausgabe nur das ';'
schau mal in der mysql doku unter GROUP_CONCAT nach....
Ilja
yo,
CONCAT_WS() wird dich vermutlich zum ziel bringen
Leider nein, wenn ich das mache seh ich in der Ausgabe nur das ';'
schau mal in der mysql doku unter GROUP_CONCAT nach....
Ilja
Hm.. das hat mir per SQL Abfrage direkt schonmal ein gutes Ergebnis geliefert :)
Jetzt hab ich das ganze versucht in PHP zu schieben aber da bekomme ich weiterhin nur das ';' - hab ich was vergessen?
<?php do { ?>
<tr>
<td><span class="Stil18"><?php echo $row_Recordset1['kategorie']; ?></span></td>
<td><div align="center"><span class="Stil18"><?php echo $row_Recordset1['SUM(preis)']; ?></span></div></td>
<td><div align="right"><span class="Stil18"><?php echo $row_Recordset1['benutzer']; ?></span></div></td>
</tr>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
?>
Evtl hilft das zum Durchblick^^
Ah halt, hatte vergessen zu speichern, so kann man ja kein aktuelles Ergebnis erhalten^^
Jetzt schauts gut aus. Bis auf eine Kleinigkeit.
Wie bekomme ich die nun zuviel angezeigten ';' weg?
Wie bekomme ich die nun zuviel angezeigten ';' weg?
mit substr das letzte zeichen wegschnipseln
daum hatte ich ursprünglich concat_ws vorgeschlagen, das fügt das trennzeichen nur zwischen den strings ein, nicht aber am ende - aber aber mit subqueries ist concat_ws recht unpraktikabel
Wie bekomme ich die nun zuviel angezeigten ';' weg?
mit substr das letzte zeichen wegschnipseln
daum hatte ich ursprünglich concat_ws vorgeschlagen, das fügt das trennzeichen nur zwischen den strings ein, nicht aber am ende - aber aber mit subqueries ist concat_ws recht unpraktikabel
Ja aber bei concat_ws hat er nix angezeigt, also wenn in einer kategorie halt mehrere namen sind. einzelne namen ist kein problem.
nur jetzt hab ich in einer ausgabe zB folgendes als benutzer:
, ,Mueller, Meier
Und das schaut ja nun arg doof aus^^
Wie bekomme ich die nun zuviel angezeigten ';' weg?
mit substr das letzte zeichen wegschnipseln
daum hatte ich ursprünglich concat_ws vorgeschlagen, das fügt das trennzeichen nur zwischen den strings ein, nicht aber am ende - aber aber mit subqueries ist concat_ws recht unpraktikabel
;,;,Mueller;,Meier;
Das ist die aktuelle anzeige wenn ich zwischen den ' ' ein ; setze..
Irgendwas haut doch da noch nicht hin, ok jetzt stehen schon die Namen da, aber die zusätzlichen Zeichen sind nicht gewollt. Wie kann ich diese umgehen?
Das ist die aktuelle anzeige wenn ich zwischen den ' ' ein ; setze..
Irgendwas haut doch da noch nicht hin, ok jetzt stehen schon die Namen da, aber die zusätzlichen Zeichen sind nicht gewollt. Wie kann ich diese umgehen?
SELECT REPLACE(GROUP_CONCAT(feldname), ',', ';') FROM tabelle
Das ist die aktuelle anzeige wenn ich zwischen den ' ' ein ; setze..
Irgendwas haut doch da noch nicht hin, ok jetzt stehen schon die Namen da, aber die zusätzlichen Zeichen sind nicht gewollt. Wie kann ich diese umgehen?SELECT REPLACE(GROUP_CONCAT(feldname), ',', ';') FROM tabelle
Da hab ich weiterhin die Zeichen noch zu stehen wo kein Benutzer vorhanden ist.
Also 4 Mal Kategorie A aber nur zweimal einen Benutzer macht bei mir nun zwei ; vor den beiden aneinandergereihten Namen
Ja aber bei concat_ws hat er nix angezeigt, also wenn in einer kategorie halt mehrere namen sind. einzelne namen ist kein problem.
du solltest die fehlermeldungen mit mysql_error() abfangen
ich hatte ursprünglich das im sinn
SELECT CONCAT_WS(';', (SELECT feld FROM tabelle))
hier sollte aber "#1242 - Subquery returns more than 1 row" und nicht einfach stillschweigend ";" zurückgeliefert werden
Ja aber bei concat_ws hat er nix angezeigt, also wenn in einer kategorie halt mehrere namen sind. einzelne namen ist kein problem.
du solltest die fehlermeldungen mit mysql_error() abfangen
ich hatte ursprünglich das im sinn
SELECT CONCAT_WS(';', (SELECT feld FROM tabelle))
hier sollte aber "#1242 - Subquery returns more than 1 row" und nicht einfach stillschweigend ";" zurückgeliefert werden
So wenn ich das mache habe ich wieder überall eine Anzeige wo ich nur einen Benutzer habe, und sobald mehrere Benutzer angezeigt werden sollen sieht man nix, auch keine Fehlermeldung. So denk ich mal das das group_concat() schon ganz in die richtige richtung ging, weil so hatte ich wenigstens eine Ausgabe. Oh man da raucht mir schon wieder das Köpfchen^^
<?php do { ?>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
?>
bist du dir sicher, dass du eine do-while-schleife willst? - endgeprüfte schleifen sind in diesem fall weniger praktikabel als anfangsgeprüfte schleifen