Ankündigung

Einklappen
Keine Ankündigung bisher.

Group By und Order By in der Abfrage

Einklappen

Neue Werbung 2019

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

  • Group By und Order By in der Abfrage

    Hi Zusammen ich möchte eine SQL abfrage machen bei der ich irgendwie hänge.

    also ich hab eine Tabelle die sieht so aus (beispiel vereinfacht)

    Name Position Bild

    So der Name muss immer gesetzt sein und Position ebenfalls bild kann aber Null sein.

    Ich möchte jetzt zwei gruppen bilden einmal die die ein bild haben und einmal die die kein Bild haben.

    Dazu dacht ich mich ich mach ein Group by

    was an sich auch klappte dass dann zuerst die Mit bild angezeigt wurden und dann erst die ohne bild.

    Zusätzlich wollte ich aber die beiden Gruppen auch noch nach ihrer Position sortieren. also Die mit bild sollen noch nach Ihrer Position sortiert werden und die ohne bild ebenfalls.
    WAs leider nicht klappt ... traurig

    mein ansatz sah so aus:

    Code:
    SELECT * FROM `prefix_versichererpartner` WHERE aktiv = 0 GROUP by case when bild1 is null then 1 else 0 end, bild1 ORDER BY bild1 desc, position asc
    wo ist mein denk fehler?


  • #2
    Versuch mal im SELECT ein ifNull(bild1, 0) AS bild_or_zero anzugeben und dann nach ORDER BY bild_or_zero, ... zu soriteren. Dann sollten alle in erster Ebene die NULL haben dann mit 0 für die Sortierung ganz oben sein.

    Ich habe sowas mal hier gebraucht, ev. hilft dir das:

    Code:
    SELECT u.nickname, SUM(ifNull(t.punkte, 0)) AS user_punkte
    FROM tab_user u
    ...
    GROUP BY u.nickname
    ORDER BY user_punkte DESC, u.nickname
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      WAs leider nicht klappt ... traurig
      Sagt uns nicht viel. Gibts Fehlermeldung oder machts nicht was es soll?

      Versuch mal im SELECT ein ifNull(bild1, 0) AS bild_or_zero anzugeben und dann nach ORDER BY bild_or_zero, ... zu soriteren. Dann sollten alle in erster Ebene die NULL haben dann mit 0 für die Sortierung ganz oben sein.
      Ist ein Umweg^^
      Einfach das GROUP BY wegwerfen und bild1 als erstes Kriterium für ORDER BY nehmen.
      Relax, you're doing fine.
      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

      Kommentar


      • #4
        Zitat von VPh Beitrag anzeigen
        Sagt uns nicht viel. Gibts Fehlermeldung oder machts nicht was es soll?


        Ist ein Umweg^^
        Einfach das GROUP BY wegwerfen und bild1 als erstes Kriterium für ORDER BY nehmen.
        das geht leider nicht, weil die erste guppe die mit bild ist dann falsch sortiert von X-0 , die zweite ohne bilder ist von 0-X

        Kommentar


        • #5
          Dann leg die Sortierreihenfolge mit ASC und DESC entsprechend fest.
          Relax, you're doing fine.
          RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

          Kommentar


          • #6
            ja das hab ich bereits versucht .. keine auswirkung -...



            also ich hab zwei typen von einträgen, einmal welche die ein Bild haben und welche die kein bild haben
            aber alle einträge haben eine position (numerisch) 0-XXX

            der erste typ mit bild soll als Ersetes angezeigt werden und dann der zweite block ohne bild ---> das funktioniert ja


            aber jetzt möcht ich noch dass der erste block und der zweite block jeweils abhängig ihrer position sortier sind

            also beispielsweise block 1 mit bild hat positionen 2, 5, 100, 233 und die sollen dann auch so angezeigt werden in dieser reihen folge

            und dann der zweite block ohne bild mit den positionen 1,3, XXX

            Kommentar


            • #7
              http://sqlfiddle.com Beispieldaten? Ich seh das Problem nicht.
              Relax, you're doing fine.
              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

              Kommentar


              • #8
                Ich seh das Problem nicht.
                Ev. ists ja Off-Topic.. Schau mal hier, da hatte ich damals auch mal so ein Sortierungsproblem in der Art.
                Damals fürs Froum auf einfach heruntergebrochen, aber vom Prinzip her: http://www.php.de/datenbanken/74910-...verbinden.html

                LG
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Ah, danke.
                  Jetzt hab ich gesehen, dass meine Query ja wirklich nicht funktioniert.
                  Dafür dann ne Abkürzung
                  Code:
                  ...ORDER BY bild1 IS NULL DESC, position asc
                  ...ORDER BY bild1 IS NOT NULL, position asc
                  Relax, you're doing fine.
                  RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                  Kommentar


                  • #10
                    danke aber auch das geht leider nicht, da ist jetzt alles kreuz und quer ...

                    Beispiel: ich hab folgende daten

                    position, bild
                    67, Blubb
                    88, Null
                    22, Blubb
                    1, Null
                    232, Blubb
                    12, Null

                    die sollen so angezeigt werden

                    22, Blubb
                    67, Blubb
                    232, Blubb
                    1, Null
                    12, Null
                    88, Null


                    Also es soll getrennt werden in die Mit bild und die ohne bild

                    und der block mit bildern soll sortiert sein und der block ohne bild soll sortiert sein

                    Kommentar


                    • #11
                      Hast du es schonmal wie oben in meinem verlinkten Thread versucht?
                      Code:
                      ... ORDER BY IF(bild IS NULL, 0, 1), position
                      Dann sollte intern ja so soriert werden, zuerst nach 0 oder 1 und "innerhalb" gleicher 1 bzw. 0 dann nach Pos. Sicher bin ich mir leider aber nicht, versuch mal.

                      Code:
                      1, 22,  Blubb 
                      1, 67,  Blubb
                      1, 232, Blubb
                      0, 1,   Null
                      0, 12,  Null
                      0, 88,  Null
                      LG
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von holz-felix Beitrag anzeigen
                        danke aber auch das geht leider nicht, da ist jetzt alles kreuz und quer ...
                        Hier gibts ein Kommunikationsproblem...
                        Entweder verhunzt du den Query oder in deiner Datenbank steht was anderes drin als du hier erzählst.

                        Geht folgender Query?
                        PHP-Code:
                        SELECT FROM `prefix_versichererpartnerWHERE aktiv 0 ORDER BY bild1 IS NOT NULLposition 

                        Kommentar


                        • #13
                          die tabelle hat natürlich noch weitere spalten die ich jetzt hier weggelassen habe weil die für die sortierung irrelavant sind

                          bild und position sind beides keine KEys sondern nur normale attribute

                          und nein der query den du gepostet hast geht nicht

                          Kommentar


                          • #14
                            Geht nicht in Form von einer Fehlermeldung oder geht nicht in Form sortiert wahllos? Die Sorierung mit IS NULL funktioniert auf jedenfall. Wir können jetzt natürlich das Spiel starten "Was machst du falsch?". Der Gewinner bekommt ne Waschmaschine. Das macht aber kein Spaß...
                            Daher Poste bitte ein SQL Dump mit dem man das Problem reproduzier kann, oder erstell ein Beispiel unter http://sqlfiddle.com/. Vielleicht findest du dabei schon den Fehler.

                            Kommentar


                            • #15
                              ja genau die sortierreihenfolge ist wahllos (also sortierung von position)


                              hier ist das beispiel:
                              http://sqlfiddle.com/#!2/9b743/1

                              Kommentar

                              Lädt...
                              X