Vergleich mit Zeile davor

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

  • Vergleich mit Zeile davor

    Hallo,

    folgendes Problem... ich habe eine Abfrage die DESC steht...

    z.B.
    PHP-Code:
    SELECT IDWERT1WERT2  
    FROM  
    `Tabelle1
    WHERE  `id`  = XYZ
    ORDER  BY  
    `Tabelle1`.`ID`  DESC LIMIT 10 
    Soo... Ergebnis sieht dann z.B. so aus

    ID | WERT1 | WERT 2
    1000 | 16516 | 2156165
    800 | 54561 | 16516
    25 | 5116 | 1561

    Wie ist es möglich, den Wert mit der vorhergehenden Zeile zu vergleichen, also ID 1000 mit 800 und 800 mit 25??

  • #2
    Was willst du damit bezwecken?

    Stichwort wäre korrelierte Unterabfrage.
    (Ggf. wäre auch ein SELF JOIN möglich, wobei ich mir da gerade nicht ganz vorstellen kann, wie man dort die „vorherige Zeile“ selektiert bekommt.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ich möchte auf der einen Seite den Inhalt limitieren mit max 10 Anzeigen und auf der anderen Seite die Änderungen der Werte darstellen. Also zb. wie weit hat sicht der Wert1 von ID 1000 zu ID 800 geändert.

      Kommentar


      • #4
        Hallo,

        warum ermittelst du die Differenz nicht mit PHP? Das wäre doch das einfachste.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          hmm... würde ich ja gerne machen, wäre auch zu einfach, aber DESC in MySql ist nun mal nicht ASC...
          (rückwärts/vorwärts)
          Zuletzt geändert von Nirus2000; 31.03.2011, 13:24. Grund: Erweiterung

          Kommentar


          • #6
            Zitat von Nirus2000 Beitrag anzeigen
            hmm... würde ich ja gerne machen, aber DESC ist nun mal nicht ASC...
            Dann ist vorhergehende Zeile halt nächste Zeile.

            Wenn du unsere Hilfe bei deinem Problem willst, dann beschreibe bitte deutlich und in ausreichender Ausführlichkeit, was dir Probleme bereitet.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Gut.... ich versuche es besser zu beschreiben..

              die Abfrage vereinfacht...
              PHP-Code:
              SELECT IDWERT1WERT2  
              FROM  
              `Tabelle1
              WHERE  `id`  = XYZ
              ORDER  BY  
              `Tabelle1`.`ID`  DESC LIMIT 10 
              wird dann wie folgt ausgegeben per While-Schleife ausgegeben:

              ID | WERT1 | WERT 2
              1000 | 16516 | 2156165
              800 | 54561 | 16516
              25 | 5116 | 1561

              soo...

              nun soll der Wert in dieser While-Schleife mit den zuvor ausgegebenen verglichen werden.
              Mit der Sortierung ASC ist das kein Problem... in einen Dummy den WERT1 bzw. WERT2 speichern und dann wieder vergleichen.
              Da ich aber DESC sortiere, kann ich den Wert nicht in einen Dummy speichern, weil Wert davor noch nicht existiert. Desweiteren sind die ID's nicht fortlaufend sondern unsortiert.

              Beispiel anhand von irgendwelchen ID's wie es jetzt ist mit Speicher Variable:

              WHILE-ID -> VEGLEICHS-ID
              8204 -> 0
              5970 -> 8204
              5345 -> 5970
              4715 -> 5345
              4021 -> 4715
              3385 -> 4021
              2731 -> 3385
              2063 -> 2731
              1427 -> 2063
              779->1427

              richtig wäre aber

              WHILE-ID -> VEGLEICHS-ID
              8204 -> 5970
              5970 -> 5345
              5345 -> 4715
              4715 -> 4021
              4021 -> 3385
              3385 -> 2731
              2731 -> 2063
              2063 -> 1427
              1427 -> 779
              779 -> 0

              Kommentar


              • #8
                Zitat von Nirus2000 Beitrag anzeigen
                Da ich aber DESC sortiere, kann ich den Wert nicht in einen Dummy speichern, weil Wert davor noch nicht existiert.
                Ein „Wert davor“ existiert bei der Verarbeitung des ersten Datensatzes generell nicht, egal wie die Daten sortiert sind.

                Er existiert erst ab dem zweiten Datensatz, den dein Script verarbeitet.

                Desweiteren sind die ID's nicht fortlaufend sondern unsortiert.
                Doch, sie sind sortiert, weil du das in der Query explizit angegeben hast.

                richtig wäre aber

                WHILE-ID -> VEGLEICHS-ID
                8204 -> 5970
                5970 -> [...]
                Diesen ersten Vergleich kannst du durchführen, sobald du den zweiten Datensatz aus dem Abfrageergebnis geholt hast.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  hmm... logisch, aber die Ausgabe findet schon in der While-Schleife statt. Genau das ist mein Problem.

                  Kommentar


                  • #10
                    das ist ja nu noch einfacher ..

                    hole dir mit einer der mysql_fetch-Funktionen die Erste Zeile aus der Ergebnis-Tabelle

                    ID 8204 - den gibst du jetzt aber nicht sofort aus, sondern nun beginnt deine while-Schleife,

                    die liest mit ihrem mysql_fetch nun ihrerseits die 2te Zeile ein - und ab hier gibst du aus

                    Alte ID , Alte irgendwas , Differenz - Beträge (neue Werte hast du ja )
                    danach Alte Werte mit den aktuellen Überschreiben und Schleife wieder von vorn
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      hä? Versteh ich net...

                      Kommentar


                      • #12
                        Du willst Werte vergleichen, die aber der Reihe nach ankommen. Vergleichen kannst du also erst, wenn der zweite Wert vorliegt und du den ersten gespeichert hast.

                        Pseudocode:
                        Code:
                        vergleichswert = wert_abrufen();
                        while (neuerwert = wert_abrufen()) {
                            differenz = neuerwert - vergleichswert;
                            vergleichswert = neuerwert;
                        }
                        Gruß,

                        Amica
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          danke Amica , dein Pseudocode erläutert wunderbar , was mein etwas umständlicher Text aussagen sollte
                          [font=Verdana]
                          Wer LESEN kann, ist klar im Vorteil!
                          [/font]

                          Kommentar


                          • #14
                            bei mir macht es einfach nicht klick.... wie soll ich den den Vergleichswert aufrufen und dann vergleichen?

                            Kommentar


                            • #15
                              Zitat von Nirus2000 Beitrag anzeigen
                              wie soll ich den den Vergleichswert aufrufen
                              Mit wert_abrufen() ist in diesem Pseudocode natürlich das Holen des nächsten Datensatzes aus dem Abfrageergebnis gemeint - also die Anwendung einer der mysql_fetch-Funktionen.

                              Ein bisschen musst du schon logisch mitdenken (können), wenn du sowas mit Tipps von uns umsetzen willst.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X