Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] knifflige abfrage über 3 zeilen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] knifflige abfrage über 3 zeilen

    ein Dezimal Preis wird stündlich abgerufen und in eine Tabelle geschrieben:

    --------
    1 | 1.86
    --------
    2 | 1.87
    --------
    3 | 1.88
    --------

    die Bedingung ist erfüllt wenn der Preis in Zeile 1 kleiner ist als in Zeile 2 und Zeile 3, Preis von Zeile 3 muss auch höher sein als der Preis von Zeile 2 ...
    das o.g. Beispiel erfüllt die Bedingung (Abfrage auch stündlich auf die letzten 3 Zeilen).
    Wie kann man das möglichst Resourcen schonend umsetzen?

  • #2
    Ich verstehe noch nicht warum du immer die letzten drei Zeilen abfragen möchtest. Ich nehme an du fügst den Preis jede Stunde unten an und zwar nur wenn alle Bedingungen erfüllt sind?
    Wenn eine der Bedingungen ist, das Zeile 3 Größer als Zeile 2 ist, was ich deinem Text so entnehme, dann muss Zeile 3 im Umkehrschluss automatisch größer als Zeile 1 sein, denn sonst wäre sie gar nicht eingetragen worden.

    Die Aufgabenstellung wäre also nur sinnvoll wenn auch

    --------
    1 | 1.89
    --------
    2 | 1.87
    --------
    3 | 1.88
    --------

    in der Tabelle stehen kann. Ist das denn der Fall?
    Dann würde ich vermutlich mit "SELECT `preise` FROM `table` ORDER BY id DESC LIMIT 0,3" arbeiten. Im Ergebnis hättest du dann natürlich die letzten drei Einträge in umgekehrter Ordnung (Im Bsp: unten dann im Array $ergebnis). Also müsstest du prüfen Ob dein Ergebnis 1 kleiner als Ergebnis 2 und als Ergebnis 3 ist und in diesem Fall die Bedingung bejahen.

    also etwas wie
    PHP-Code:
    if($ergebnis[0]<$ergebnis[1] AND $ergebnis[0]<$ergebnis[2]) 

    Kommentar


    • #3
      Zitat von TessaKavanagh Beitrag anzeigen
      Ich verstehe noch nicht warum du immer die letzten drei Zeilen abfragen möchtest. Ich nehme an du fügst den Preis jede Stunde unten an und zwar nur wenn alle Bedingungen erfüllt sind?
      Wenn eine der Bedingungen ist, das Zeile 3 Größer als Zeile 2 ist, was ich deinem Text so entnehme, dann muss Zeile 3 im Umkehrschluss automatisch größer als Zeile 1 sein, denn sonst wäre sie gar nicht eingetragen worden.

      Die Aufgabenstellung wäre also nur sinnvoll wenn auch

      --------
      1 | 1.89
      --------
      2 | 1.87
      --------
      3 | 1.88
      --------

      in der Tabelle stehen kann. Ist das denn der Fall?
      genau so ist es , es kann natürlich auch anders rum sein oder der Preis kann auch überall gleich sein ... die Daten werden stündlich von einem externen XML feed ausgelesen.
      Kann man das in eine Abfrage packen ohne vorher auszuwerten?

      Kommentar


      • #4
        Siehe Edit oben. Damit solltest du eigentlich ein Array mit 3 Einträgen bekommen. Natürlich nur wenn du es dir auch als Array zurückgeben lässt der sollte eigentlich die letzten drei Reihen zurückgeben, da ja nach id Absteigens sortiert und auf drei Einträge beschränkt wird

        Kommentar


        • #5
          Zitat von TessaKavanagh Beitrag anzeigen
          also etwas wie
          PHP-Code:
          if($ergebnis[0]<$ergebnis[1] AND $ergebnis[0]<$ergebnis[2]) 
          Danke, sieht gut aus
          Ich hatte vornhin gegrübelt ob das ganze auch direkt über einen select möglich wäre ...

          Kommentar


          • #6
            Dafür müsste man wissen was du überhaupt machen möchtest. Natürlich kannst du grundsätzlich auch einen Vergleich in die MysQL Anweisung einbauen.
            http://www.php-kurs.com/mysql-select-anweisung.htm

            Vielleicht gibt dir das ein paar Anregungen. Die Vergleichsoperatoren lassen sich natürlich entsprechend Verknüfen. Du willst als Rückgabe also immer genau den niedrigsten Wert der letzten drei Stunden?

            Es ist im Prinzip auch über MySQL direkt lösbar, allerdings fällt mir dazu grade nur eine verschachtelte SELECT Anweisung ein und ich bezweifel das das performanter ist als es mit PHP zu lösen. Auch glaube ich nicht das das Array nach Preis (aufsteigend) zu sortieren und dann einfach den ersten Eintrag statt einem IF zu nehmen einen Performancevorteil verspricht.

            Kommentar

            Lädt...
            X