Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] ORDER BY - Bestimmter Wert zuletzt

Einklappen

Neue Werbung 2019

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

  • [Erledigt] ORDER BY - Bestimmter Wert zuletzt

    Hallo, ich habe ein kleines Problem mit einer Auflistung aus einer Datenbank.

    Mein Script gibt eine Tabelle aus mit den Werten aus der Datenbank.
    Diese soll man auch sortieren können (über GET gelöst, funktioniert super)

    Eine Sortierungs-Möglichkeit soll ein Datum sein (in MySQL eine Spalte mit dem Typ: DATE) welches quasi die "Deadline" ist.
    Also Auftrag muss fertig sein bis XX

    Der Auftrag der am ehesten fertig sein muss, als Bsp: Heute, der 02.10. und drei Aufträge, der eine bis 05.10. und der andere bis zum 11.11,
    soll als erstes angezeigt werden, etwa so:
    1) 05.10.
    2) 11.11.
    3) *Auftrag ohne Deadline* (also zuletzt)

    Das Problem ist jetzt, dass eben nicht jeder Auftrag eine "Deadline" hat.
    In der Datenbank steht als Wert: "0000-00-00", und die anderen z.b. 2014-02-02

    Wie kann ich es jetzt schaffen, das nach der Deadline zu sortieren, ABER die Aufträge ohne Deadline hinten anzustellen. Also erst werden die gelistet, die eine Deadline haben und dann hinten dran die ohne Deadline.

    Danke schon mal für die Antworten und ich hoffe ich hab's so beschrieben das man das Problem verstehen kann

  • #2
    Zwei SELECT und per UNION die Ergebnisse verbinden...
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zitat von lstegelitz Beitrag anzeigen
      Zwei SELECT und per UNION die Ergebnisse verbinden...
      Ok, klingt schon mal gut. Könntest du mir das ganze evtl etwas genauer beschreiben?

      Kommentar


      • #4
        Zitat von lstegelitz Beitrag anzeigen
        Zwei SELECT und per UNION die Ergebnisse verbinden...
        Gerade heute erst darüber gestolpert, das geht besser:

        Code:
        ORDER BY ISNULL(dueDate)
        [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

        Kommentar


        • #5
          Zitat von ChristianK Beitrag anzeigen
          Gerade heute erst darüber gestolpert, das geht besser:

          Code:
          ORDER BY ISNULL(dueDate)
          Ich habe natürlich schon das ganze Netz durchsucht.
          Diese Lösungen hatte ich auch schon gefunden, aber sie funktionierten nicht.
          Ich denke das das daran liegt, das das DATE - Feld nicht NULL ist. Sondern eben: "0000-00-00"

          Kann man nicht anstatt "ISNULL" einen Wert abfragen? z.B. "IS0000-00-00"

          Aktuell:
          PHP-Code:
          $orderBy "Checkbox, Deadline";
          ..
          "SELECT * FROM Liste ORDER BY ".$orderBy
          Unter anderem getestet: (Hat nicht funktioniert)
          PHP-Code:
          $orderBy "Checkbox, ISNULL(Deadline), Deadline";
          ..
          "SELECT * FROM Liste ORDER BY ".$orderBy
          Natürlich habe ich viele andere Dinge im Zusammenhang mit ISNULL und co versucht... aber bis jetzt hat's einfach nicht geklappt

          Kommentar


          • #6
            Zitat von DarkShapeArts Beitrag anzeigen

            Kann man nicht anstatt "ISNULL" einen Wert abfragen? z.B. "IS0000-00-00"
            Und damit kommst du zu den 2 Selects und Union^^
            http://dev.mysql.com/doc/refman/4.1/en/union.html simple Sache

            Hab jetzt aber nicht gesehen, ob für dich vllt ein anderer Lösungsweg etwas besser passt.
            [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


            • #7
              Und damit kommst du zu den 2 Selects und Union^^
              Warum nicht einfach 2 Sortierkriterien? Die Notwendigkeit für ein UNION sehe ich hier nicht.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Zitat von DarkShapeArts Beitrag anzeigen
                Wie kann ich es jetzt schaffen, das nach der Deadline zu sortieren, ABER die Aufträge ohne Deadline hinten anzustellen. Also erst werden die gelistet, die eine Deadline haben und dann hinten dran die ohne Deadline.

                Danke schon mal für die Antworten und ich hoffe ich hab's so beschrieben das man das Problem verstehen kann
                order by ... nulls last. Und nein, '0000-00-00' ist kein valides Datum. Nur MySQL erkennt das nicht.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Warum nicht einfach 2 Sortierkriterien? Die Notwendigkeit für ein UNION sehe ich hier nicht.
                  Ah, jo klar. Daran hatte ich gar nicht gedacht.


                  Googlehilfe: mysql order by specific value
                  Abkürzung: http://stackoverflow.com/questions/1...ic-value-first
                  [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


                  • #10
                    Hey, danke für die ganzen Antworten

                    .. nulls last
                    -> Bekomme ich einen Error (Syntax)
                    Code:
                    SELECT * FROM Liste ORDER BY Deadline NULLS LAST

                    Vermutlich hab ich einen Syntax-Fehler (bin php anfänger und mysql noob) ?

                    Bei den anderen muss ich noch mal genau schauen.

                    Aber das versteh ich jetzt nicht so ganz.
                    - 2 Sortierkriterien? => Ich wollte nach Checkbox (State) & dem zweiten, der Deadline sortieren

                    Kommentar


                    • #11
                      Was für eine Checkbox(State)? In deinen bisherigen Posts ist davon nichts zu lesen, deine Queries zeigen davon auch nichts. Aber wenn du auch noch sortieren willst, hast du am Ende eben 3 Kriterien
                      [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


                      • #12
                        PHP-Code:
                        .. "SELECT * FROM Liste ORDER BY Checkbox, (`Deadline` = '0000-00-00'), Deadline; 
                        So geht's

                        Vielen Dank an alle und speziell an VPh.
                        Kann mir einer evtl noch kurz erklären, was diese Line bewirkt?

                        - Auswahl von allem ( * ) von Tabelle (klar)
                        - ORDER BY (sortierungs-klausel) -> Checkbox & ..
                        - (`Deadline` = '0000-00-00') <= "Schauen" ob Deadline den 0-Wert hat?
                        Aber was passiert dadurch?


                        Edit: @VPh, stimmt. Ich hatte es nur mal in einem Schnipsel geschrieben. Es sollen die abgehakten Aufträge ebenfalls nach unten sortiert werden. Das hatte ich allerdings schon geschafft und dann nicht weiter beachtet

                        Kommentar


                        • #13
                          (`Deadline` = '0000-00-00')
                          Dur das = wird dadurch eine boolsche Operation. True und False werden in diesem Fall durch 1 und 0 repräsentiert, nach denen dann sortiert wird. 0 ist kleiner als 1, ergo erscheinen zuerst die Datensätze, für die die Bedingung false ergibt.
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #14
                            Zitat von nikosch Beitrag anzeigen
                            Dur das = wird dadurch eine boolsche Operation. True und False werden in diesem Fall durch 1 und 0 repräsentiert, nach denen dann sortiert wird. 0 ist kleiner als 1, ergo erscheinen zuerst die Datensätze, für die die Bedingung false ergibt.
                            Vielen Dank! Perfekt erklärt!

                            #done

                            Kommentar


                            • #15
                              Zitat von DarkShapeArts Beitrag anzeigen
                              Ich habe natürlich schon das ganze Netz durchsucht.

                              Diese Lösungen hatte ich auch schon gefunden, aber sie funktionierten nicht.

                              Ich denke das das daran liegt, das das DATE - Feld nicht NULL ist. Sondern eben: "0000-00-00"



                              Kann man nicht anstatt "ISNULL" einen Wert abfragen? z.B. "IS0000-00-00"



                              [...]

                              tja, tut mir leid, wenn du Schrott in deiner Datenbank speicherst kann ich leider auch nicht helfen.

                              Ich pflichte akretschmer wobei und merke an, dass es eine Einstellung gibt, die auch MySQL dieses Datum als falsch erkennen lässt.

                              Entweder speicherst du die Daten korrekt. Oder. Es gibt tatsächlich eine Möglichkeit, du kannst auch nach einem CASE sortieren.
                              [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                              Kommentar

                              Lädt...
                              X