calibaba: Aneinanderreihen von einzelnen Zellen in eine Tabellenspalte

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

  1. Aber mit den Namen das man die aneinanderreihen kann bekomm ich noch nicht hin.

    CONCAT_WS() wird dich vermutlich zum ziel bringen

    1. CONCAT_WS() wird dich vermutlich zum ziel bringen

      Leider nein, wenn ich das mache seh ich in der Ausgabe nur das ';'

      1. 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

        1. 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^^

          1. 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?

            1. 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

              1. 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^^

                1. 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?

                  1. 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

                    1. 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

                2. 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

                  1. 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^^

          2. <?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