Ankündigung

Einklappen
Keine Ankündigung bisher.

Modifikation des Abfrageergebnisses

Einklappen

Neue Werbung 2019

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

  • Modifikation des Abfrageergebnisses

    Hallo

    Unter der Verwendung von "SELECT * FROM ergebnis WHERE rnnr=1 ORDER BY LEAST(IFNULL(e_lauf1, 10000), IFNULL(e_lauf2, 10000))" erhalte ich folgendes Ergebnis:

    ergebnis.PNG

    Nun muss die Abfrage so modifiziert werden, dass nach aufsteigender Sortierung der Zahlen unter Beachtung von Leeren Werten
    vorhandene Werte in lauf1_bv,lauf2_bv kommen (Bsp stnr:6) und danach erst vollwertige leere Tupel (Bsp 4,5).

    Wer kann mir da helfen?

    Grüße

  • #2
    Zitat von julianbolte Beitrag anzeigen
    Hallo

    Unter der Verwendung von "SELECT * FROM ergebnis WHERE rnnr=1 ORDER BY LEAST(IFNULL(e_lauf1, 10000), IFNULL(e_lauf2, 10000))" erhalte ich folgendes Ergebnis:

    ...

    Nun muss die Abfrage so modifiziert werden, dass ...
    Bitte den Dump - mindestens von der Tabelle "ergebnis".

    Kommentar


    • #3
      Schwierig, Ergebnis ist ein View aus 3 Tabellen:
      Struktur von Ergebnis:

      stnr | f_lauf1 | e_lauf1 | f_lauf2 | e_lauf2 | lauf1_bv | lauf2_bv
      int | int | decimal | int | decimal | text | text

      wobei f_la ... , e_la ... null sein können, wenn das Ergebnis einer/beider Tabellen fehlend ist.

      Es soll folgender Maßen sortiert werden:

      1. Tupel aufsteigend sortiert nach jeweils dem kleineren Ergebnis von e_lauf1,e_lauf2
      2. Tupel wenn e_lauf1 und e_lauf2 null aber lauf1_bv oder lauf2_bv nicht null
      3. Tupel bei denen alles null ist

      Dazu Suche ich eine Abfrage, folgende
      "SELECT * FROM ergebnis WHERE rnnr=1 ORDER BY LEAST(IFNULL(e_lauf1, 10000), IFNULL(e_lauf2, 10000))"
      gibt obriges Ergebnis indem dem Punkt 2 und 3 meiner Liste nicht erfüllt sind

      Gruß und Danke im Voraus

      Kommentar


      • #4
        Thema zum einlesen.
        https://www.designcise.com/web/tutor...-last-in-mysql

        Kommentar


        • #5
          Zitat von julianbolte Beitrag anzeigen
          Schwierig, Ergebnis ist ein View aus 3 Tabellen:...
          Daran ist überhaupt nichts schwierig. Du erstellst einfach einen Dump von allen drei Tabellen plus dem View. Wenn man das Problem nicht nachstellen kann, ist es schwer zu helfen.

          Kommentar


          • #6
            julianbolte

            Die Vorredner haben natürlich recht. Ohne Dump ist es schwer eine Aussage zu treffen, zumal du nicht alle angezeigten Felder des Select * zeigst.

            Ich vermute aber du willst auf folgendes hinaus:

            Code:
            ORDER by -e_lauf1 desc, -f_lauf2 desc, -lauf1_bv desc ...
            Das sortiert die Zahlen aufsteigend mit Nullwerten am Ende. Die Sortorder habe ich nur hingeschrieben weil die Feldbezeichner für mich wenig Aussagekraft haben e_xxx1 f_xxx2.
            Das hat Protestix bereits in #4 vorgeschlagen, (was ich aber eben erst gesehen habe desw. die Korrektur).

            Manche Datenbanken (PostgreSQL, ORACLE, DB2..), bieten auch die Möglichkeit der Sortierung mit NULLS LAST oder NULLS FIRST

            Kommentar


            • #7
              Der Link von protestix #4 sollte nicht übersehen werden. Eine Sortierung mit "-Feldname DESC" halte ich für trickreich und schwer lesbar. Besser finde ich die Varianten welche mit IS NULL oder isNull() arbeiten (Auch im Link beschrieben).

              Kommentar


              • #8
                Zitat von jspit Beitrag anzeigen
                Der Link von protestix #4 sollte nicht übersehen werden. Eine Sortierung mit "-Feldname DESC" halte ich für trickreich und schwer lesbar. Besser finde ich die Varianten welche mit IS NULL oder isNull() arbeiten (Auch im Link beschrieben).
                Hatten wir auch hier mal erwähnt. Das mit dem -Feldname kannte ich gar nicht.. interessant. Ev. dort noch zu ergänzen.
                https://php-de.github.io/jumpto/sql-...ort/#bedingung
                The string "()()" is not palindrom but the String "())(" is.

                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
                  Ich würde da eher ein Beispiel mit isNull() mit reinnehmen. Damit sind auch Sortierungen mit der Order "wie viel Spalten sind NULL" einfach zu erstellen. Vermute das ist es was der TE hier haben möchte.

                  Kommentar


                  • #10
                    Ein vernünftige DB Struktur nach den Regeln der 3.Normalform, würde das Darstellen des gewünschten Ergebnisses höchstwahrscheinlich vereinfachen.
                    Hier sieht man wieder wie krampfhaft versucht wird eine normalerweise einfache Sortierung aufgrund von durchnummerierten Spalten und falscher Datenablage in die gewünschte Form zu bringen.

                    Warum tut man sich so was an?
                    Das ist auch für die Helfer keine schöne Geschichte und die Folgefehler sind jetzt schon abzusehen.

                    Kommentar


                    • #11
                      Zitat von protestix Beitrag anzeigen
                      Ein vernünftige DB Struktur nach den Regeln der 3.Normalform, würde das Darstellen des gewünschten Ergebnisses höchstwahrscheinlich vereinfachen.
                      Hier sieht man wieder wie krampfhaft versucht wird eine normalerweise einfache Sortierung aufgrund von durchnummerierten Spalten und falscher Datenablage in die gewünschte Form zu bringen.
                      Die eigentliche Datenstruktur ist nicht sichtbar. Er schreibt, es ist ein View, der 3 Tabellen abbildet. Ich würde das hier aber nicht so verkrampft sehen. Wenn die Domain "immer" 2 Läufe hat, dann kann das auch als Spalten sinn machen. Das ein Lauf mehrere Eigenschaften hat, wäre dann schon eher ein negativ Indikator.
                      Letztendlich ändert das aber nix an der Problematik. Wenn das Ergebnis so aussehen soll wie oben, kommst du genau hier wieder raus. So spanned ist die Problemstellung dann aber auch nicht. Die Hälfte steht schon da. Es muss nur noch nach den letzten Spalten sortiert werden.

                      PHP-Code:
                      ... ,ISNULL(lauf1_bvDESCISNULL(lauf2_bvDESC 

                      Kommentar


                      • #12
                        Zitat von julianbolte Beitrag anzeigen
                        Nun muss die Abfrage so modifiziert werden, dass nach aufsteigender Sortierung der Zahlen unter Beachtung von Leeren
                        Zahlen?
                        NIZ DIS-Q

                        Alles klar.


                        Kommentar


                        • #13
                          Könnte die Ursprüngliche abfrage so einfacher funktionieren?

                          Code:
                          SELECT * FROM ergebnis WHERE rnnr=1 ORDER BY COALESCE(e_lauf1, e_lauf2, 10000)

                          Kommentar


                          • #14
                            Zitat von Blar Beitrag anzeigen
                            Könnte die Ursprüngliche abfrage so einfacher funktionieren?

                            Code:
                            SELECT * FROM ergebnis WHERE rnnr=1 ORDER BY COALESCE(e_lauf1, e_lauf2, 10000)
                            Ich sehe im Moment nicht, daß auch nur irgendeine Lösung weiter bringen könnte, solange nicht
                            1. Die Datenbankstruktur offengelegt wird
                            2. eine klare Regel für die Reihenfolge inkl. solcher Ergebnisse wie "NIZ" und "DIS-Q" (lustig, so habe ich in ca. 50 Jahren Leistungssport noch nie eine Disqualifikation abgekürzt gesehen...) formuliert wird.
                            Letztere sollte dann vielleicht auch in einer "kleinen" Tabelle in der Datenbank festgeschrieben sein.

                            Kommentar

                            Lädt...
                            X