Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Abfrage mit Group

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] SQL Abfrage mit Group

    Wenn ich meine Daten aus der Tabelle mit GROUP gruppiere, was ist dann mit den anderen Informationen (z.B. Jahr)? Bei mir wird nur das erste jahr ausgegeben. Wie könnte ich es erreichen, das ale jahre mit ausgegeben werden könnten ?


    Meine Beispiel Tabelle (datenbank):

    id jahr text
    1 1900 aaa
    1 1901 aaa
    1 1902 aaa
    1 1903 aaa
    2 1904 aaa
    2 1905 aaa
    2 1906 aaa
    3 1907 aaa
    3 1908 aaa


    $sqlbefehl= "SELECT * FROM (SELECT * FROM datenbank ORDER BY id) as x GROUP BY x.id"; $ergebnis = mysql_query($sqlbefehl);


    So sollte es aussehen:

    1 1900,1901,1902,1903 aaa
    2 1904,1905,1906 aaa
    3 1907,1908 aaa


    Es sieht aber so aus:

    1 1900 aaa
    2 1904 aaa
    3 1907 aaa


    Für ein wenig Hilfe wäre ich dankbar, mach schon den ganzen Tag daran rum.


  • #2
    Das wirst mit group by auch nicht hinbekommen, warum liest nicht die Datensätze aus machst das dann im Quellcode so, dass diese hintereinander aufgelistet werden?
    Look at This!
    Digital-Duty.DE
    Für Syntax-Fehler übernehme ich keine Haftung!

    Kommentar


    • #3
      hi, habe meine datenbankabfrage hier etwas gekürzt. es sind noch WHERE bedingungen drin. auch die daten etwas vereinfacht dargestellt.

      Kommentar


      • #4
        So wie du es mit group versuchst kann es nicht gehen, group fasst mehrere gleiche Datensätze (anhand von fremdschlüsseln) zu einem Datensatz zusammen. Was du brauchst ist denke ich nur über deinen Quelltext zu realisieren.

        Mir ist jedenfalls keine Möglichkeit bekannt um deine erwünschte Ausgabe hin zu bekommen. Vllt über left-Joins, wobei das auch nicht das richtige ist...
        Look at This!
        Digital-Duty.DE
        Für Syntax-Fehler übernehme ich keine Haftung!

        Kommentar


        • #5
          Probier mal die MySQL Speziallösung mit GROUP_CONCAT

          Code:
          CREATE TABLE test_daten (
           id INT NOT NULL,
           jahr INT NOT NULL,
           text VARCHAR(10)
          );
          
          INSERT INTO test_daten VALUES
          ( 1, 1900, 'aaa'),
          ( 1, 1901, 'aaa'),
          ( 1, 1902, 'aaa'),
          ( 1, 1903, 'aaa'),
          ( 2, 1904, 'aaa'),
          ( 2, 1905, 'aaa'),
          ( 2, 1906, 'aaa'),
          ( 3, 1907, 'aaa'),
          ( 3, 1908, 'aaa');
          
          SELECT id, 
                 GROUP_CONCAT(DISTINCT jahr ORDER BY jahr ASC SEPARATOR ',' ) AS gruppe,
                 MAX(text) AS text
            FROM test_daten
           GROUP BY id
           ORDER BY id;
           
          +----+---------------------+------+
          | id | gruppe              | text |
          +----+---------------------+------+
          |  1 | 1900,1901,1902,1903 | aaa  |
          |  2 | 1904,1905,1906      | aaa  |
          |  3 | 1907,1908           | aaa  |
          +----+---------------------+------+
          3 rows in set (0.06 sec)
          
          mysql>
          Grüße
          Thomas

          Kommentar


          • #6
            Hey super, vielen vielen Dank, hat wunderbar funktioniert.

            SELECT id,
            GROUP_CONCAT(DISTINCT jahr ORDER BY jahr ASC SEPARATOR ',' ) AS gruppe,
            MAX(text) AS text
            FROM test_daten
            GROUP BY id
            ORDER BY id;

            Kommentar

            Lädt...
            X