Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Abfrage über 2 Variablen mit gleicher Priorität

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Abfrage über 2 Variablen mit gleicher Priorität

    Hallo,
    ich habe folgende Abfrage:
    PHP-Code:
    $sql "SELECT * FROM tabelle  ORDER BY ADDDATE( `termin` , INTERVAL `intervall` DAY)"
    Hier werden die Datensätze nach einem berechneten Datumswert (Format:0000-00-00, termin+intervall) sortiert.
    Das funktioniert auch. Jetzt würde ich gerne nach einem zweiten Kriterium (datum) sortieren, allerdings mit GLEICHER Priorität.
    D.h. nicht erst nach dem berechneten Termin und dann nach dem Datum, also so:
    PHP-Code:
    $sql "SELECT * FROM tabelle  ORDER BY ADDDATE( `termin` , INTERVAL `intervall` DAY), `datum`"
    Sondern so, dass
    PHP-Code:
    ADDDATE( `termin` , INTERVAL `intervallDAY
    und
    PHP-Code:
    `datum
    in der Sortierung die gleiche Priorität haben.
    Ich hoffe, ich habe mich verständlich ausgedrückt.

    Vielen Dank im Voraus!

  • #2
    Ich glaube nicht das das geht und irgendwas muss doch den Vorrang haben, was sollen denn da für Ergebnisse rauskommen und warum mit gleicher Priorität?

    Kommentar


    • #3
      Sowohl der berechnete Wert als auch der zweite Wert haben ja das Format 0000-00-00.

      Jetzt möchte ich quasi dass nach diesen beiden Datumswerten "gleichberechtigt" sortiert wird.

      Also z.B.
      1. 2010-01-01 (berechneter Wert)
      2. 2010-01-05 (datumswert)
      3. 2010-01-08 (datumswert)
      4. 2010-01-10 (berechneter Wert)

      Also die Datensätze nach beiden Werten sortiert und die Ergebnisse "vermischt".

      Kommentar


      • #4
        Hallo,

        du kannst beide Datumswerte (Datenwerte?) in einen Unix Timestamp umwandeln, addieren, und danach sortieren. Oder aber du nimmst den Maximalwert, sortierst danach absteigend, anschließend nimmst du den Minimalwert und sortierst danach ebenfalls absteigend.

        Also etwa so:
        ORDER BY (UNIX_TIMESTAMP(DATE_ADD(...)) + UNIX_TIMESTAMP(...)) DESC
        bzw.
        ORDER BY GREATEST(DATE_ADD(...), DATE_ADD(...)) DESC, LEAST(...) DESC

        Edit: In deinem Fall sortierst du ASC.
        "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

        Kommentar


        • #5
          Zitat von spiderguy Beitrag anzeigen
          Sondern so, dass ADDDATE( `termin` , INTERVAL `intervall` DAY) und `datum` in der Sortierung die gleiche Priorität haben.
          Ich hoffe, ich habe mich verständlich ausgedrückt.
          Nein, nicht wirklich.

          Was soll denn passieren, wenn die beiden Werte unterschiedlich sind?
          Beispieldaten und gewünschtes Ergebnis wären vielleicht zum Verständnis hilfreich.

          Vermutlich wirst du da mit einer Fallunterscheidung o.ä. rangehen müssen.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            im Grunde sieht dein Ansinnen gerade bei Datum etwas eigenartig aus ....


            wenn ich nach einer Datum-Spalte sortiere, erwarte ich eine Zeitliche Abfolge..

            welchen Sinn soll dabei dein "berechnetes Datum" haben ? .. für mich läuft das entweder vom ältesten zum neuesten oder umgekehrt ? - dafür ist das order ja da ..

            also wie sollen bei der Angabe deines Datums dann Werte behandelt werden, die Davor liegen?
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

            Kommentar


            • #7
              Im Prinzip habe ich 2 Datumswerte (einen berechnet, einer so).
              Ich möchte jetzt nach dem Datum sortieren, das älter ist, also mehr in der Vergangenheit liegt.

              Etwa so in der Art:
              PHP-Code:
              $sql "SELECT * FROM db ORDER BY IF (datum>ADDDATE( `termin` , INTERVAL `intervall` DAY ), 'datum', ADDDATE( `termin` , INTERVAL `intervall` DAY )) ASC"
              Bzw. einfacher ausgdrückt: Wenn Datum1>Datum2 dann nach Datum1 sortieren, ansonsten nach Datum2.

              Kommentar


              • #8
                öhm... entweder steh ich gerade ganz gewaltig auf dem sprichwörtlichen Schlauch .. oder du erklärst es sehr seltsam , was du willst

                wie willst du denn eine Menge an verschieden Datum-Werten nach einem "Datum" sortieren ? was soll dabei rauskommen ?
                "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                Kommentar


                • #9
                  Ich glaub das funktioniert so:

                  PHP-Code:
                  $sql "SELECT * FROM db ORDER BY IF (datum>ADDDATE( `termin` , INTERVAL `intervall` DAY ), 'datum', ADDDATE( `termin` , INTERVAL `intervall` DAY )) ASC"
                  Danke für Eure Hilfe!

                  Kommentar


                  • #10
                    So sinnlos finde ich das Unterfangen nicht. Man stelle sich vor, es gibt ein Erstellungs- und ein Bearbeitungsdatum. Nun soll eben nach dem größten Datum sortiert werden.

                    Edit: 'datum' ist sicherlich falsch, du meinst `datum`
                    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

                    Kommentar


                    • #11
                      Das IF-Statement kannst du auch komplett durch LEAST() ersetzen, dem einfach die zwei Datumswerte übergeben, liefert den „kleineren“ von beiden zurück, also das ältere Datum - das liest sich vielleicht etwas besser, bzw. hält die Query übersichtlicher.
                      [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                      Kommentar

                      Lädt...
                      X