Order by - kleine Frage

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

  • Order by - kleine Frage

    Hi,
    stellt euch folgende Situation vor:

    -status-datum-
    -2--------16.04.09
    -0--------15.04.09
    -3--------11.04.09
    -0--------10.04.09

    (Nach Datum geordnet)

    Der Status zeigt die Anzahl bestimmter Optionen an.

    Der Eintrag mit dem höchsten Datum soll oben stehen.
    Jedoch nur, wenn der Status bei diesem Eintrag mind. 1 beträgt!

    beträgt der Status 0, so darf er nicht mehr oben stehen, sondern sich
    unten bei den anderen 0 Einträgen, chronologisch in das Datum einordnen.

    Das heißt, es sollte so aussehen:
    -status-datum-
    -2--------16.04.09
    -3--------11.04.09
    -0--------15.04.09
    -0--------10.04.09


    (Hier ist auch nach Datum geordnet, sogesehen 2 Arten von Sortietungen)
    Einmal nach datum sortieren alle Einträge die > 0 sind und einmal alle nach datum sortieren die = 0 sind.

    Bekomme ich das nur mit einer IF abfrage hin?

    Dankeschön

  • #2
    machst doch mit union

    select ... where status>0 order by ...
    union
    select ... where status<=0 order by ...

    Kommentar


    • #3
      Original geschrieben von asp2php
      machst doch mit union

      select ... where status>0 order by ...
      union
      select ... where status<=0 order by ...
      Hm.. Werds gleich mal ausprobieren.

      Kommentar


      • #4
        edit
        Zuletzt geändert von phpMorpheus2; 12.04.2009, 15:27.

        Kommentar


        • #5
          Ah,
          das war die HAVING Funktion oder?
          Bin grad mal alle Funktionen durchgegangen und denke HAVING ist mein Freund.

          Kommentar


          • #6
            Wieso darf ich eine Tabelle mit UNION nicht sortieren?
            Beispiel:
            PHP-Code:
            SELECT date FROM db
            UNION
            SELECT date FROM db2 
            Nun werden mir beide Spalten unabhängig voneinander untereinander angezeigt.
            Erst date und dann date2.

            Wenn ich aber nun einzeln sortieren will mit order by,
            da passiert dann überhaupt nichts!

            PHP-Code:
            SELECT date FROM db ORDER BY date ASC
            UNION
            SELECT date FROM db2 ORDER BY date DESC 
            Da ist meiner Query total egal ob ich da ASC oder DESC hinschreibe,
            das Ergebnis ändert sich kein bischen.
            Warum nicht?

            Mit
            PHP-Code:
            (SELECT date FROM db)
            UNION
            (SELECT date FROM db2)
            ORDER BY date DESC/ASC 
            kann ich ja nichts anfangen, weil beide tabellen unterschiedlich sortiert werden sollen.

            UNION sortiert alle tabellen von sich aus, oder?

            Kommentar


            • #7
              Warum liest du nicht einfach mal das Handbuch?
              Dann müsstest du gar nicht auf Antwort hier warten, und in den 15 Minuten zum Tippen deines Postings, hättest du diese Seite hier schon ganz lesen können:
              http://dev.mysql.com/doc/refman/5.0/en/union.html

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Original geschrieben von ghostgambler
                Warum liest du nicht einfach mal das Handbuch?
                Dann müsstest du gar nicht auf Antwort hier warten, und in den 15 Minuten zum Tippen deines Postings, hättest du diese Seite hier schon ganz lesen können:
                http://dev.mysql.com/doc/refman/5.0/en/union.html
                Ja, aber ich kann kein Limit gebrauchen!
                Es muss doch anders gehen.
                Ich kann ja leider kein LIMIT COUNT(*) abfragen...

                Kommentar


                • #9
                  Lies das Handbuch. Steht alles dort:

                  However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows.

                  To cause rows in a UNION result to consist of the sets of rows retrieved by each SELECT one after the other, select an additional column in each SELECT to use as a sort column and add an ORDER BY following the last SELECT.

                  To additionally maintain sort order within individual SELECT results, add a secondary column to the ORDER BY clause.

                  Use of an additional column also enables you to determine which SELECT each row comes from. Extra columns can provide other identifying information as well, such as a string that indicates a table name.
                  Zuletzt geändert von h3ll; 12.04.2009, 16:09.

                  Kommentar


                  • #10
                    Original geschrieben von h3ll
                    Lies das Handbuch. Steht alles dort:

                    However, use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows.

                    To cause rows in a UNION result to consist of the sets of rows retrieved by each SELECT one after the other, select an additional column in each SELECT to use as a sort column and add an ORDER BY following the last SELECT.

                    To additionally maintain sort order within individual SELECT results, add a secondary column to the ORDER BY clause.

                    Use of an additional column also enables you to determine which SELECT each row comes from. Extra columns can provide other identifying information as well, such as a string that indicates a table name.
                    Ich habe eine Extra Spalte, nach der ich am ende der beiden SELECT abfrage sortieren kann.
                    Und zwar nach dem Timestamp (So soll ja auch sortiert werden)
                    Doch dann vermischen sich beide SELECT Abfragen miteinander,
                    was ja wiederum nicht gewünscht ist.

                    Es sollen sogesehen durch die beiden Abfragen
                    2 tabellen erstellt werden.
                    Durch die erste SELECT abfrage werden alle Einträge mit Status > 0 nach dem timestamp sortiert angezeigt und darum von der zweiten SELECT die Einträge Status = 0 nach dem timestamp sortiert angezeigt werden.

                    Ich könnte eig. auch einfach zwei komplett unabhängige querys ausführen und die Ergebnisse zusammenfügen.
                    Aber immer diese umgehungen sind ja auch net das wahre.

                    Und lauf Manual funktionieren einzelne Sortierungen mit jeweils einem eigenständigem ORDER BY nur in verbindung mit LIMIT (ausschließlich) !

                    Kommentar


                    • #11
                      Wenn du 2 Tabellen erstellen willst, was spricht dann gegen 2 Querys? Warum ist das eine "Umgehung"?

                      Kommentar


                      • #12
                        Original geschrieben von h3ll
                        Wenn du 2 Tabellen erstellen willst, was spricht dann gegen 2 Querys? Warum ist das eine "Umgehung"?
                        Ich denke, wenn ich aus 2 Query's, die exakt gleich aufgebaut sind, jedoch nur mit unterschiedlichen Inhalten, doch wohl in einer Query mit UNION zu bewältigen ist.

                        Ich Persöhnlich hasse es, wenn ich keinen Weg finde,
                        es mir einfach, einfach mache!

                        Da geh ich lieber euch auf den Geist mit dem von mir nicht lösbarem Problem

                        Also ich habe die 2 SELECT abfragen mit UNION verbunden.
                        Einzeln sortieren kann ich zwar, die syntax braucht dazu jedoch ein Limit.
                        Wenn ich Limit einbaue, kann ich das erhalten was ich will.
                        Jedoch brauch ich kein Limit.
                        Oder gibt es Limit N ?

                        Würde zwar komisch sein, aber immerhin klappt die Syntax dann...

                        Kommentar


                        • #13
                          OK, also statt _einfach_ 2 Querys abzusetzen, fummelst du lieber mit SQL zwei Tabellen zu einer zusammen um sie dann später wieder mit PHP auseinanderfummeln zu müssen?

                          Kommentar


                          • #14
                            Original geschrieben von h3ll
                            OK, also statt _einfach_ 2 Querys abzusetzen, fummelst du lieber mit SQL zwei Tabellen zu einer zusammen um sie dann später wieder mit PHP auseinanderfummeln zu müssen?
                            Nein. Ich fummel dann garnichts mehr auseinander in php :-)

                            Kommentar


                            • #15
                              To cause rows in a UNION result to consist of the sets of rows retrieved by each SELECT one after the other, select an additional column in each SELECT to use as a sort column and add an ORDER BY following the last SELECT:

                              (SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)
                              UNION
                              (SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col;
                              To additionally maintain sort order within individual SELECT results, add a secondary column to the ORDER BY clause:

                              (SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)
                              UNION
                              (SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col, col1a;
                              Use of an additional column also enables you to determine which SELECT each row comes from. Extra columns can provide other identifying information as well, such as a string that indicates a table name.
                              Da sind sogar Beispiele für genau deinen Fall dabei...

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X