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

  • #16
    Zitat von dazzle89 Beitrag anzeigen
    Danke für die Antworten.

    ..., 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.
    Wenn ich Dich richtig verstehe, dann kannst Du im GROUP BY noch nach einer weiteren Spalte gruppieren:

    Code:
    SELECT
      name,
      MIN(`alter`) as maxalter,
      spalte
    FROM
      tabelle 
    GROUP BY 
      name, spalte
    PHP Entwickler aus Berlin

    Kommentar


    • #17
      Naja, das möchte / brauche ich aber nicht. Die Einträge wurden ja bereits erfolgreich gruppiert, nur scheinbar in der falschen Reihenfolge. Bei der Gruppierung soll nicht der Datensatz mit dem jüngsten, sondern mit dem höchsten Alter entstehen. Und mit höchstes Alter meine ich nur das höchste Alter unter den gruppierten Datensätzen, nicht das höchste Alter in der gesamten Tabelle

      Kommentar


      • #18
        Zitat von dazzle89 Beitrag anzeigen
        Leider nicht ganz. Kann auch sein, dass ich was falsch gemacht habe,
        Dann zeig mal den Aufbau deiner Tabelle personen und deine SQL-Anweisung für die Abfrage. Mir scheint, du hast nicht alles offengelegt.

        Edit: wenn in der Gruppe richtig das höchste Alter zutage tritt und nur die folgende Sortierung falsch ist, fehlt womöglich nur ein DESC beim ORDER.

        Kommentar


        • #19
          Du kannst ja mal einen Beispiel-Dump machen damit wir auch Testdaten haben um dein Problem zu lösen. Dein Problem sollte grundlegend aber über diese Query lösbar sein:
          PHP-Code:
          SELECT namemax(ageFROM personen group by name 
          Wenn du noch mehrere Spalten in der Gruppierung hast einfach dem folgenden Aufbau folgen.
          PHP-Code:
          SELECT namemax(age)[, spalte1, ...]  FROM personen group by name[, spalte1, ...] 
          Ich verwende für sowas gerne SQLFiddle da man hier die Queries gleich testen kann. Habe mal ein Beispiel angelegt: http://sqlfiddle.com/#!2/ffc3a5/9/0

          Gruß S. Brosch

          Kommentar


          • #20
            Meine Abfrage lautet:

            PHP-Code:
            SELECT idprojectIDkeywordpositionpositionChangedateMAX(queryCount) AS maxQueryCount FROM rankings WHERE position 100 GROUP BY keyword ORDER BY position asc Limit 10 
            Mit der Beispieltabelle wollte ich das ganze nur vereinfachen, in Wirklichkeit habe ich in der Datenbank Suchmaschinen-Rankings zu bestimmten Keywords stehen, die ich ausgeben möchte.

            Screenshot zur Tabelle:

            http://fs1.directupload.net/images/141119/sytorw3d.jpg


            Ich möchte, dass die 10 Keywords mit den besten Platzierungen ausgegeben werden. Damit ich später einen Ranking-Verlauf darstellen kann, werden die Keyword-Rankings häufiger gespeichert. Jedesmal, wenn eine Abfrage ausgeführt wird, wird die Spalte "queryCount" um 1 erhöht.

            Da jedes Keyword mehrere Datensätze hat, werden diese gruppert und ich möchte, dass zu jedem Keyword nur der neueste Datensatz, also mit dem höchsten queryCount, ausgegeben wird. Am Ende wird die Liste dann noch nach der Spalte "position" sortiert ...

            Kommentar


            • #21
              Zitat von dazzle89 Beitrag anzeigen
              Mit der Beispieltabelle wollte ich das ganze nur vereinfachen, in Wirklichkeit habe ich ..
              Na super, wenn nach rumeiern über 20 Beiträge die echte Aufgabenstellung sichtbar wird.

              Zitat von dazzle89 Beitrag anzeigen
              Meine Abfrage lautet:

              PHP-Code:
              SELECT idprojectIDkeywordpositionpositionChangedateMAX(queryCount) AS maxQueryCount FROM rankings WHERE position 100 GROUP BY keyword ORDER BY position asc Limit 10 
              Das funktioniert dann nicht so einfach.

              Kommentar


              • #22
                Auweia, das ist wieder Wasser auf akretschmers Mühlen...

                Du hast Spalten in der Select Liste, die nicht im GROUP BY auftauchen.

                http://dev.mysql.com/doc/refman/5.0/...-handling.html
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #23
                  Sorry! Ich wollte es nur vereinfachen...

                  Inwiefern ist es denn nun schwieriger / komplizierter?

                  Kommentar


                  • #24
                    Zitat von jspit Beitrag anzeigen
                    Na super, wenn nach rumeiern über 20 Beiträge die echte Aufgabenstellung sichtbar wird.
                    Genau aus dem Grund - ich bin raus.
                    PHP Entwickler aus Berlin

                    Kommentar


                    • #25
                      Letztendlich entspricht in meiner neuen Tabelle die Spalte "queryCount" dem Alter und "keyword" dem Namen der Beispieltabelle, die restlichen Spalten sollten für mein Anliegen keine Rolle spielen... Und WHERE und ORDER BY sind ja sowieso optional... Und zur Select-Liste: Ich möchte fast alle Spalten auswählen, aber gruppiert werden soll ja nur die Spalte "keyword"

                      Naja sorry

                      Kommentar


                      • #26
                        Zitat von dazzle89 Beitrag anzeigen
                        Letztendlich entspricht in meiner neuen Tabelle die Spalte "queryCount" dem Alter und "keyword" dem Namen der Beispieltabelle, die restlichen Spalten sollten für mein Anliegen keine Rolle spielen... Und WHERE und ORDER BY sind ja sowieso optional... Und zur Select-Liste: Ich möchte fast alle Spalten auswählen, aber gruppiert werden soll ja nur die Spalte "keyword"

                        Naja sorry
                        Die zusätzlichen Spalten, die nicht gruppiert oder aggregiert werden können / sollen / dürfen, bringen die Schwierigkeit ins Spiel. Durch diese Anforderung wird man von GROUP BY auf die falsche Fährte gelockt, da die Query auf einmal gar nicht mehr so simpel ist und wenn mans doch simpel gestaltet erhält man an manchen Stellen nicht die Werte, die eigentlich rauskommen sollten.

                        Im Handbuch kannst du vielleicht sinnvolles für deinen Fall herauslesen, die Problemstellung tritt öfter auf. http://dev.mysql.com/doc/refman/5.5/...group-row.html
                        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                        Kommentar


                        • #27
                          Zitat von dazzle89 Beitrag anzeigen
                          Und zur Select-Liste: Ich möchte fast alle Spalten auswählen, aber gruppiert werden soll ja nur die Spalte "keyword"
                          Das geht so nicht. Auch nicht mehr in zukünftigen Versionen von MySQL. Also laß es lieber und mach es richtig.
                          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                          Kommentar


                          • #28
                            Ok, trotzdem danke für die Bemühungen!!!

                            Dann werd ich mir was anderes überlegen. z.B. eine Tabelle anlegen, in der nur die neusten Rankings, also mit dem höchsten queryCount, gespeichert werden.

                            Kommentar


                            • #29
                              Code:
                              SELECT * FROM (SELECT * FROM user ORDER BY age DESC) AS a GROUP BY name

                              Kommentar


                              • #30
                                Zitat von Blar Beitrag anzeigen
                                Code:
                                SELECT * FROM (SELECT * FROM user ORDER BY age DESC) AS a GROUP BY name
                                DU BIST MEIN HELD

                                Es klappt damit perfekt. Tausend Dank!

                                Falls es wen interessiert, hier die funktionierende Abfrage:

                                PHP-Code:
                                SELECT FROM (SELECT FROM rankings ORDER BY queryCount DESC) AS test WHERE position 100 GROUP BY keyword ORDER BY position asc Limit 10 

                                Kommentar

                                Lädt...
                                X