Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Select-Abfrage

Einklappen

Neue Werbung 2019

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

  • Problem mit Select-Abfrage

    Hallo,

    leider weiß ich nicht mehr, wonach ich googlen soll, deshalb frage ich hier mal nach. Ich bin schon froh, das mit dem GROUP BY herauszufinden zu haben.

    Meine Beispieltabelle:

    Name Alter
    ==================
    Hans 20
    Hans 18
    Hans 22
    Dennis 15
    Heinrich 22
    Sven 23

    Ich möchte alle Namen und Alter ausgeben. Wenn ein Name allerdings häufiger vorkommt, soll nur ein Datensatz davon ausgegeben haben. In diesem Fall also nur 1 Hans. Es MUSS aber der Datensatz sein, wo Hans das höchste Alter hat!

    Mein Query sieht bisher so aus:

    PHP-Code:
    SELECT FROM personen GROUP BY name Limit 10 
    Leider weiß ich nicht, wie ich die Abfrage erweitern muss, um für jeden Namen nur die älteste Person auszugeben.

    Könnt ihr mir helfen?

    Vielen Dank im voraus!


  • #2
    Mach doch noch ein ORDER BY Alter hin

    Code:
    SELECT * FROM personen GROUP BY name ORDER BY alter DESC Limit 10

    Kommentar


    • #3
      Danke, da bin ich irgendwie nicht drauf gekommen.

      Ich glaube, das hilft mir weiter.

      Kommentar


      • #4
        Zitat von raven3k Beitrag anzeigen
        Mach doch noch ein ORDER BY Alter hin

        Code:
        SELECT * FROM personen GROUP BY name ORDER BY alter DESC Limit 10
        Die Forderung
        Zitat von dazzle89 Beitrag anzeigen
        .. um für jeden Namen nur die älteste Person auszugeben.
        ist mit der obigen Abfrage aber nicht erfüllt.
        Diese gruppiert zwar die Namen, nimmt aber das erst beste Alter dazu und sortiert dies dann nach absteigenden Alter.

        Hinweis: Schau dir die MAX-Funktion in MySQL an.
        PHP-Klassen auf github

        Kommentar


        • #5
          Oh sorry, ich war etwas zu voreilig.

          Es klappt noch nicht ganz, denn es werden nun zwar die Namen (gruppiert) ausgegeben, allerdings jeweils nur der Name mit dem niedrigsten Alter.

          Liegt wohl daran, dass die Namen zuerst gruppiert werden und dann jeweils nur noch einen Namen gibt, also gibt es keine unterschiedlichen Alter mehr, nach sortiert werden kann

          Kommentar


          • #6
            Danke für den Hinweis.

            MAX habe ich mir schon angeschaut, aber ich glaube, das hilft mir nicht weiter.

            Wenn ich "SELECT MAX(alter) AS maxalter" o.ä. verwende, wird mir das höchste Alter ALLER Personen zusammen, aber nicht für jede Person einzeln, zurückgegeben. Ich müsste also die MAX-Funktion irgendwie im ORDER BY verwenden, oder? Ich weiß aber nicht wie ...

            Kommentar


            • #7
              Nee, mit GROUP BY name wie schon richtig in deinem 1.Versuch.
              PHP-Klassen auf github

              Kommentar


              • #8
                Ich weiß aber leider nicht, an welcher Stelle ich MAX einsetzen muss... das Problem, das ich dabei sehe, habe ich ja in meinem letzten Post beschrieben

                Kommentar


                • #9
                  Verwende HAVING, nämlich so:

                  PHP-Code:
                  SELECT FROM personen GROUP BY name HAVING MAX(`alter`) ORDER BY `alterDESC LIMIT 10 
                  PHP Entwickler aus Berlin

                  Kommentar


                  • #10
                    Anstelle von * dann SELECT name, MAX(alter) AS maxalter ...
                    Edit: HAVING ist nicht notwendig.
                    Code:
                    SELECT
                      name,
                      MAX(alter) as maxalter
                    FROM
                      personen 
                    GROUP BY 
                      name
                    ORDER und LIMIT hintendran optional.
                    PHP-Klassen auf github

                    Kommentar


                    • #11
                      Zitat von kwebsde Beitrag anzeigen
                      Verwende HAVING, nämlich so:

                      PHP-Code:
                      SELECT FROM personen GROUP BY name HAVING MAX(`alter`) ORDER BY `alterDESC LIMIT 10 
                      EDIT: Anscheind war ich zu voreilig
                      PHP Entwickler aus Berlin

                      Kommentar


                      • #12
                        Hab mein Beitrag #10 nochmal geändert.
                        PHP-Klassen auf github

                        Kommentar


                        • #13
                          Danke für die Antworten.

                          Bei der MAX-Variante habe ich nun das folgende Problem:

                          Es wird nach wie vor der Name mit dem jüngsten Alter zurückgegeben, bloß dass ich im Array das höchste Alter stehen habe. Ich muss aber den gesamten Eintrag mit dem höchsten Alter haben, weil in der Tabelle noch weitere Spalten sind, in denen sich die Personen unterscheiden, und die möchte ich ausgeben.

                          Ich bekomme aber leider den Datensatz mit dem jüngsten Alter zurückgegeben.

                          Ich weiß leider nicht wie ich es besser erklären kann.

                          Kommentar


                          • #14
                            So wie jspit es im SELECT hat, sollte es deiner Anforderung nach richtig sein. Mit dem HAVING im Statement in meinem Post hättest Du nur die Personen, welche das Höchstalter der gesamten Tabelle haben.
                            PHP Entwickler aus Berlin

                            Kommentar


                            • #15
                              Leider nicht ganz. Kann auch sein, dass ich was falsch gemacht habe, aber bisher ist es so, dass mir der Datensatz mit dem jüngster Alter ausgegeben wird, bloß dass bei diesem Datensatz die Alters-Spalte mit dem höchsten Alter ersetzt wird

                              Kommentar

                              Lädt...
                              X