Ankündigung

Einklappen
Keine Ankündigung bisher.

Gruppierte Tabelle aus MySQL Datenbank

Einklappen

Neue Werbung 2019

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

  • #16
    Okay, ich probiere das mal aus.

    In der SQL-Abfrage ist ein kleiner Fehler drin:

    Code:
    SELECT 
    	fz.ID, 
    	m.Marke, 
    	fz.Modell,
    	fz.KategorieID as 'KatID', -- <= Komma fehlt
    	kat.Bezeichnung as 'Kategorie',
    	DATE_FORMAT(fz.1Inv, '%m.%Y') as 'Jahrgang',
    	fz.KMStand as 'KM', 
    	fz.Farbe, 
    	fz.Klima, 
    	fz.Optionen,
    	b.pfad as 'Bild',
    	fz.Preis,
    	fz.aktiv
    FROM 
    	Fahrzeuge fz
    INNER JOIN Marken m
    	ON fz.MarkenID = m.ID
    INNER JOIN Kategorie kat
    	ON fz.KategorieID = kat.ID
    LEFT JOIN bilder b
    	ON fz.bilderID = b.ID
    WHERE fz.aktiv = 'JA'
    ORDER BY fz.KategorieID ASC, m.Marke ASC;
    Das Komma habe ich korrigiert und alle Ticks entfernt, jetzt läuft die SQL-Abfrage erst einmal bei mir durch. Ich versuche dies jetzt umzuschreiben.

    Grüße
    Thomas

    Kommentar


    • #17
      So, ich habe meine SQL-Idee jetzt in Deine Abfrage eingebaut. Probier mal, ob dies eine Lösung für Dich ist.

      Code:
      SELECT a.gruppe, 
             a.ID, 
             a.Marke, 
             a.Modell,
             a.KatID,
             a.Kategorie,
             a.jahrgang,
             a.KM, 
             a.Farbe, 
             a.Klima, 
             a.Optionen,
             a.Bild,
             a.Preis,
             a.aktiv
        FROM  ( SELECT @merk_kategorie := NULL ) AS init ,
              ( SELECT CASE 
                        WHEN @merk_kategorie IS NULL THEN kat.Bezeichnung
                        WHEN kat.Bezeichnung != @merk_kategorie THEN kat.Bezeichnung
                       ELSE NULL
                       END AS gruppe,
                       fz.ID, 
                       m.Marke, 
                       fz.Modell,
                       fz.KategorieID as 'KatID',
                       kat.Bezeichnung as 'Kategorie',
                       DATE_FORMAT(fz.1Inv, '%m.%Y') as 'Jahrgang',
                       fz.KMStand as 'KM', 
                       fz.Farbe, 
                       fz.Klima, 
                       fz.Optionen,
                       b.pfad as 'Bild',
                       fz.Preis,
                       fz.aktiv,
                       @merk_kategorie := kat.Bezeichnung AS dummy
                  FROM Fahrzeuge fz
                  JOIN Marken m
                    ON fz.MarkenID = m.ID
                  JOIN Kategorie kat
                    ON fz.KategorieID = kat.ID
                  LEFT JOIN bilder b
                    ON fz.bilderID = b.ID           
                 WHERE fz.aktiv = 'JA' 
               ORDER BY kat.Bezeichnung, fz.KategorieID ASC, m.Marke ASC) AS a
      ORDER BY a.KatID ASC, a.Marke ASC;
      Grüße
      Thomas

      Kommentar


      • #18
        Zitat von thomas_w Beitrag anzeigen
        ... Probier mal, ob dies eine Lösung für Dich ist.
        ...
        Grüße
        Thomas
        Grundsätzlich könnte ich damit leben. Vielen Dank. Jedoch gehe ich mit Dir einig, dass dies wohl eher direkt in php gelöst werden sollte. Jedoch komme ich mit der Funktion "Gruppenbruch" nicht zurecht, und es konnte (oder wollte) mit bisher niemand so richtig helfen.

        Zu Deinem Select eine Frage:
        Wieso erhalte ich in phpmyadmin als ergebnis eine Tabelle, in der die Gruppe "Occasion" an einer Stelle doch wieder ausgeschrieben wird und nicht NULL ist? (siehe Printscreen als Attachement)

        Aber sonst ist der Select genial...

        Gruss
        Küre
        Angehängte Dateien

        Kommentar


        • #19
          Hallo Küre,

          a) zu phpMyAdmin Bild

          Stimmt, sieht so aus, als ob da was falsch läuft. Das kann ich aber erst heute abend ausprobieren.

          b) php Lösung

          Richtig, mit PHP läßt sich die Gruppendarstellung relativ einfach erledigen. Im Prinzip läuft es ähnlich wie mit meinem SQL-Beispiel und der User-Variable @merk_kategorie. Ich setzte voraus, dass in der Tabelle die Spalte kategorie
          immer gefüllt ist (also nie NULL ist).

          Programm-Schema zum Gruppenwechsel erkennen:

          1) Init $merk_kategorie = NULL;
          2) In der Schleife jeden Datensatz holen und den Inhalt von Kategorie in $kategorie einlesen
          3) Init beim 1. Satz IF (empty($merk_kategorie)) { $merk_kategorie = $kategorie }
          4) Gruppenwechsel prüfen IF ($merk_kategorie == $kategorie) { Kein Gruppenwechsel: NULL für Spalte "Kategorie" ausgeben } else { $kategorie für Spalte "Kategorie" ausgeben und $merk_kategorie = $kategorie setzen}
          5) so weiter bis alle Datensätze gelesen sind

          Ich hoffe, dies ist einigermassen verständlich.

          Generell hat dieses Forum die Tendenz: "Ätsch ich weiß was, verrate es aber nicht, wenn Du nicht mindestens eine Woche in Yahoo gegoogelt hast...". So wird hier eben Traffik generiert. Dabei heißt es doch immer "..es gibt keine dummen Fragen, sondern höchstens dumme Antworten..". So kann man sich eben täuschen bzw. das Internet ändert alles.

          Grüße
          Thomas

          Kommentar


          • #20
            Zitat von thomas_w Beitrag anzeigen
            Generell hat dieses Forum die Tendenz: "Ätsch ich weiß was, verrate es aber nicht, wenn Du nicht mindestens eine Woche in Yahoo gegoogelt hast...".
            Generell haben Anfänger hier (offenbar) die Tendenz, sich Hinweise/Artikel kurz anzuschauen, und dann zu sagen „mir zu schwer, wer macht das für mich - hier ist mein Code, bitte einbauen.“

            Dabei heißt es doch immer "..es gibt keine dummen Fragen, sondern höchstens dumme Antworten..". So kann man sich eben täuschen bzw. das Internet ändert alles.
            Es gibt Leute, die eigenen sich mangels logischem Denkvermögen einfach kein bisschen zum Programmieren.

            Gerade ein Gruppenwechsel/-bruch ist ein derart simples Verfahren - wenn man das selbst mit Erklärung nicht versteht, sollte man's m.E. lieber lassen.
            [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

            Kommentar


            • #21
              Zitat von ChrisB Beitrag anzeigen
              Generell haben Anfänger hier (offenbar) die Tendenz, sich Hinweise/Artikel kurz anzuschauen, und dann zu sagen „mir zu schwer, wer macht das für mich - hier ist mein Code, bitte einbauen.“
              Ich gebe natürlich zu, dass die Frager es sich häufig sehr bequem machen. Andererseits gäbe es ja auch die Möglichkeit, einfach garnicht zu antworten, anstatt dass drei Leute gleichzeitig über den Frager herfallen, um sich mal so richtig zu profilieren.

              Zitat von ChrisB Beitrag anzeigen
              Es gibt Leute, die eigenen sich mangels logischem Denkvermögen einfach kein bisschen zum Programmieren.

              Gerade ein Gruppenwechsel/-bruch ist ein derart simples Verfahren - wenn man das selbst mit Erklärung nicht versteht, sollte man's m.E. lieber lassen.
              Mag sein, aber PHP steht in dem Ruf für einfache Lösungen - ohne viel Aufwand - gut zu sein. Dass dem überhaupt nicht so ist, wissen alle, die bereits das erste Projekt in den Sand gesetzt haben.

              So, bevor es total Offtopic wird, klinke ich mich hier mal aus.

              Grüße
              Thomas

              Kommentar


              • #22
                Ich gebe ChriSB im Prinzip recht, oft wird gefragt, bevor studiert wird.
                Ich mache die meisten meiner Websites mit Dreamweaver CS5. Da wird eben schon sehr viel an php-Code vom Programm übernommen. Ich selber habe von php nicht sehr viel Ahnung, das gebe ich zu. Deshalb gelangte ich ja auch mit meiner Frage an dieses Forum. ChrisB hat mir insofern geholfen, dass ich nun weiss mit welcher Funktion ich mein Problem lösen könnte. Aber das ist auch schon alles!

                Dir Thomas vielen Dank für deine MySQL-Hilfe. Ich werde versuchen, ob ich das Ganze nicht doch noch mit php zustande bringe... leider wird im Internet immer wieder auf den bereits erwähnten Beitrag im Wiki verwiesen, jedoch ohne weiterführende Erklärungen. Und für einen php-DAU wie mich reicht der Wiki-Beitrag m.E. nicht aus.

                Gerade ein Gruppenwechsel/-bruch ist ein derart simples Verfahren - wenn man das selbst mit Erklärung nicht versteht, sollte man's m.E. lieber lassen.
                Auch mit dem Auto rückwärts in eine seitliche Parklücke einparken ist ein derart simples Verfahren. Trotzdem werden es Fahranfänger nie schaffen, ohne den Hinweis wann man einlenken und wann wieder zurücklenken muss. Erst diese kleinen Hilfen ermöglichen es doch in einem Ansatz einzuparken.

                So eine kleine Hilfe hätte ich mir von diesem Forum zu meinem Beitrag erhofft.

                Kommentar


                • #23
                  Zitat von alkusa Beitrag anzeigen
                  Und für einen php-DAU wie mich reicht der Wiki-Beitrag m.E. nicht aus.
                  Nicht jede Anleitung/jeder Artikel hat überhaupt den Anspruch, für den absoluten DAU zu sein.
                  Wer komplexere Sachen umsetzen will, der muss sich auch entsprechende Vorkenntnisse erarbeiten.

                  Was Dreamweaver in Sachen PHP bietet, weiß ich nicht.
                  Wenn's aber nicht mehr als das Zusammenklicken von ein paar Funktionsbausteinen ist, ist es natürlich klar, dass der Umgang damit einem noch lange nicht ermöglicht, irgendwas selber zu programmieren.

                  Auch mit dem Auto rückwärts in eine seitliche Parklücke einparken ist ein derart simples Verfahren. Trotzdem werden es Fahranfänger nie schaffen, ohne den Hinweis wann man einlenken und wann wieder zurücklenken muss. Erst diese kleinen Hilfen ermöglichen es doch in einem Ansatz einzuparken.
                  Und genau den Ansatz beschreibt der Artikel auch.

                  Wie man in den Rückwärtsgang schaltet, muss man trotzdem vorher wissen.
                  [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                  Kommentar


                  • #24
                    Zitat von ChrisB Beitrag anzeigen
                    ...
                    Und genau den Ansatz beschreibt der Artikel auch.
                    ...
                    Da bin ich eben nicht Deiner Meinung. So wie ich diesen Artikel gelesen habe, erhalte ich dort einfach die Information , (um beim Beispiel des Parkierens zu bleiben) dass ich einlenken und wieder zurücklenken muss, aber eben nicht wann, resp. wo.

                    Und genau diese Frage habe ich ja Anfangs dieses Treads gestellt, mit dem Beispiel meines Codes.

                    Aber lass es gut sein!! Ich denke ich werde einen Weg finden, mein Problem zu lösen, eventuell eben auf dem Weg der SQL-Abfrage von Thomas. Auch wenn es nicht 100%-ig das ist was ich mir vorgestellt habe.

                    Sollte ich dann einen Weg gefunden haben, werde ich mir erlauben diesen hier reinzuschreiben, dass, sollte es noch mehr solche DAU's wie mich geben, diese dann nicht mehr fragen müssen!! Und sollte ich der einzige DAU sein der diese Funktion nicht begreift ist es auch egal!

                    Kommentar


                    • #25
                      So wie ich diesen Artikel gelesen habe, erhalte ich dort einfach die Information , (um beim Beispiel des Parkierens zu bleiben) dass ich einlenken und wieder zurücklenken muss, aber eben nicht wann, resp. wo.
                      Diese Information ist eben Abhängig von der Parklücke und der größe/Bauart des Autos.

                      Kommentar


                      • #26
                        Zitat von alkusa Beitrag anzeigen
                        Zu Deinem Select eine Frage:
                        Wieso erhalte ich in phpmyadmin als ergebnis eine Tabelle, in der die Gruppe "Occasion" an einer Stelle doch wieder ausgeschrieben wird und nicht NULL ist?
                        Also ich bekomme mit meiner Abfrage und Deinen Testdaten folgende Ausgabe:
                        Code:
                        SELECT a.gruppe, 
                               a.ID, 
                               a.Marke, 
                               a.KatID,
                               a.Kategorie
                          FROM  ( SELECT @merk_kategorie := NULL ) AS init ,
                                ( SELECT CASE 
                                          WHEN @merk_kategorie IS NULL THEN kat.Bezeichnung
                                          WHEN kat.Bezeichnung != @merk_kategorie THEN kat.Bezeichnung
                                         ELSE NULL
                                         END AS gruppe,
                                         fz.ID, 
                                         m.Marke, 
                                         fz.Modell,
                                         fz.KategorieID as 'KatID',
                                         kat.Bezeichnung as 'Kategorie',
                                         DATE_FORMAT(fz.1Inv, '%m.%Y') as 'Jahrgang',
                                         fz.KMStand as 'KM', 
                                         fz.Farbe, 
                                         fz.Klima, 
                                         fz.Optionen,
                                         b.pfad as 'Bild',
                                         fz.Preis,
                                         fz.aktiv,
                                         @merk_kategorie := kat.Bezeichnung AS dummy
                                    FROM Fahrzeuge fz
                                    JOIN Marken m
                                      ON fz.MarkenID = m.ID
                                    JOIN Kategorie kat
                                      ON fz.KategorieID = kat.ID
                                    LEFT JOIN bilder b
                                      ON fz.bilderID = b.ID           
                                   WHERE fz.aktiv = 'JA' 
                                 ORDER BY kat.Bezeichnung, fz.KategorieID ASC, m.Marke ASC) AS a
                        ORDER BY a.KatID ASC, a.Marke ASC;
                        
                        +--------------+----+---------------+-------+--------------+
                        | gruppe       | ID | Marke         | KatID | Kategorie    |
                        +--------------+----+---------------+-------+--------------+
                        | Neuwagen     | 20 | Peugeot       |     1 | Neuwagen     |
                        | Vorführwagen | 21 | Peugeot       |     2 | Vorführwagen |
                        | Occasion     |  1 | Alfa Romeo    |     3 | Occasion     |
                        | NULL         |  2 | Audi          |     3 | Occasion     |
                        | NULL         |  3 | Audi          |     3 | Occasion     |
                        | NULL         |  4 | Maserati      |     3 | Occasion     |
                        | NULL         |  7 | Mercedes-Benz |     3 | Occasion     |
                        | NULL         |  6 | Mercedes-Benz |     3 | Occasion     |
                        | NULL         |  9 | Mercedes-Benz |     3 | Occasion     |
                        | NULL         |  8 | Mercedes-Benz |     3 | Occasion     |
                        | NULL         | 10 | Nissan        |     3 | Occasion     |
                        | NULL         | 11 | Peugeot       |     3 | Occasion     |
                        | NULL         | 12 | Seat          |     3 | Occasion     |
                        | NULL         | 13 | Skoda         |     3 | Occasion     |
                        | NULL         | 14 | Subaru        |     3 | Occasion     |
                        | NULL         | 16 | Volvo         |     3 | Occasion     |
                        | NULL         | 15 | Volvo         |     3 | Occasion     |
                        +--------------+----+---------------+-------+--------------+
                        17 rows in set (0.01 sec)
                        
                        mysql>
                        Soweit sieht hier alles richtig aus.

                        Ich vermute, dass in Deinen Echtdaten in der Spalte "fz.KategorieID" irgendwo ein NULL ist, dann beginnt die Gruppenbildung in dieser Zeile von neuem.

                        Grüße
                        Thomas

                        Kommentar


                        • #27
                          Zitat von thomas_w Beitrag anzeigen
                          Ich vermute, dass in Deinen Echtdaten in der Spalte "fz.KategorieID" irgendwo ein NULL ist, dann beginnt die Gruppenbildung in dieser Zeile von neuem.

                          Grüße
                          Thomas
                          Leider muss ich Dir da widersprechen. Jedes Fahrzeug hat ein KategorieID (siehe Printscreen). Ich aheb auch festegestellt, dass wenn ich bei diesem Fahrzeug (ID22) die KategorieID von 3 auf 1 setze, dann wird eben "Neuwagen" zweimal ausgegeben. Scheint also ein Problem von diesem Datemsatz zu sein.

                          Diesen habe ich via Webformular erstellt. Werde ihn mal löschen und via phpmyadmin neu erfassen. Mal schauen was passiert

                          => Nachtrag:
                          Es muss etwas damit zu tun haben, dass dieser Datensatz später hinzugefügt wurde. Ich habe ihn gelöscht und einen Neuen, mit einer anderen FahrzeugID erfasst. Dort tritt das selben Phänomen auf!!
                          Angehängte Dateien

                          Kommentar

                          Lädt...
                          X