kostenloser Webspace werbefrei: lima-city


Differenz zwischen Spalten berechnen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    So, weil es so schön war mal noch eine Frage. Habe nun schon ne Weile Dr.Google befragt, werde aber nicht fündig. Dort finde ich nur wie man Zeitabstände von timestamps berechnet.

    Ich möchte die Differenz zwischen 2 Spaltenwerten berechnen. Ich speichere über einen Cronjob „Userwerte“ in bestimmten Zeitintervallen in einer DB-Tabelle ab. Dabei wird auch ein Punktestand gespeichert, um den geht es mir jetzt.

    Das Select:
    $dbabfrage = "SELECT * FROM pointlogger_koeln WHERE id='$id_sort' ORDER BY date ASC";


    Die Schleife in der die Daten ausgegeben werden:
    while ($ausgabe = mysql_fetch_array ($result)){ 
     
    $count++;
    echo "<tr>
        <td>$ausgabe[id]</td>
        <td>$ausgabe[hs]</td>
        <td><b>$ausgabe[punkte]</b></td>
        <td>$ausgabe[date]</td>
        </tr>";
      
      
    if ($count == 2) {
      
    echo "<tr>";
    $count = 0;
        }
      
     }


    Es werden alle Einträge einer ID angezeigt und nach timestamp sortiert, ich möchte nun die Differenz des Wertes
    <td><b>$ausgabe[punkte]</b></td>
    zum vorgehenden Eintrag ermitteln und ausgeben.

    Hier mal ein Screen von der Ausgabe, vieleicht versteht man es damit leichter. Die dicken Werte sind die um die es geht.
    http://prntscr.com/lwq0k

    LG Marco
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Speicher den Wert des vorherigen Eintrags in einer Hilfsvariable und verrechne diesen in der Schleife:
    $last_points = null;
    while ($ausgabe = mysql_fetch_array ($result)){  
    if ($last_poins == null)  {
    $last_points = $ausgabe[punkte];
    }
    $count++;
    $point_diff = $last_points - $ausgabe[punkte];
    echo "<tr>
        <td>$ausgabe[id]</td>
        <td>$ausgabe[hs]</td>
        <td><b>$point_diff</b></td>
        <td>$ausgabe[date]</td>
        </tr>";
       
       
    if ($count == 2) {
       
    echo "<tr>";
    $count = 0;
        }
    $last_points = $ausgabe[punkte];
     }
  4. gib mir die spaltennamen deiner datenbank, dann kann ich dir einen querystring für SQL basteln, der dir die differenz bereits fertig errechnet ausspuckt...


    aber wird wahrshcienlich erst morgen werden, muss dann noch weg... für längere zeit...

    Beitrag zuletzt geändert: 11.12.2012 17:22:03 von sebulon
  5. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    ploco schrieb:
    Speicher den Wert des vorherigen Eintrags in einer Hilfsvariable und verrechne diesen in der Schleife:
    $last_points = null;
    while ($ausgabe = mysql_fetch_array ($result)){  
    if ($last_poins == null)  {
    $last_points = $ausgabe[punkte];
    }
    $count++;
    $point_diff = $last_points - $ausgabe[punkte];
    echo "<tr>
        <td>$ausgabe[id]</td>
        <td>$ausgabe[hs]</td>
        <td><b>$point_diff</b></td>
        <td>$ausgabe[date]</td>
        </tr>";
       
       
    if ($count == 2) {
       
    echo "<tr>";
    $count = 0;
        }
    $last_points = $ausgabe[punkte];
     }


    Das habe ich mal getestet, sollte auch das ergeben was ich mir vorstelle, ich bekomme aber leider immer 0 als Differenz angezeigt auch wenn ein Differenz vorhanden ist. Ich schau mir das aber noch genauer an, sollte doch irgendwie auch so machbar sein.



    sebulon schrieb:
    gib mir die spaltennamen deiner datenbank, dann kann ich dir einen querystring für SQL basteln, der dir die differenz bereits fertig errechnet ausspuckt...


    aber wird wahrshcienlich erst morgen werden, muss dann noch weg... für längere zeit...


    Das würde mich schon interesieren wie das geht, wenn der Wert schon fertig aus der DB kommt wäre das natürlcih viel einfacher und wohl auch schneller.

    hier mal die Tabelle

    CREATE TABLE `pennereck_de`.`pointlogger_koeln_01` (
    `log` int( 12 ) NOT NULL AUTO_INCREMENT ,
    `id` int( 30 ) DEFAULT NULL ,
    `punkte` int( 30 ) DEFAULT NULL ,
    `hs` int( 30 ) DEFAULT NULL ,
    `gangid` int( 20 ) DEFAULT NULL ,
    `rp` int( 12 ) DEFAULT NULL ,
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    PRIMARY KEY ( `log` )
    ) ENGINE = MYISAM DEFAULT CHARSET = latin1;


    LG
  6. Hi,

    hier der versprochene Code:



    SELECT ABS(`punkte` - (SELECT `punkte` from `pointlogger_koeln_01` where `id` = '$ID_1')) as ergebnis 
    FROM `pointlogger_koeln_01`
     WHERE `id` = '$ID_2';
    ;
    ;




    //welcher depp kam auf die IDee, ein SQL snippet auf 1,5 zeilen höhe zu beschränken?! sieht echt scheisse aus... die semikolons unten sind nur da, damit man das auch lesen kann... unnötig, geben aber auch keinen syntaktischen Fehler...

    Reihenfolge der IDs ist egal, weil ich mit der Differenz den absoluten wert ermittle...

    Beitrag zuletzt geändert: 12.12.2012 9:33:49 von sebulon
  7. Autor dieses Themas

    aff3m1tw4ff3

    aff3m1tw4ff3 hat kostenlosen Webspace.

    Hi,

    sorry das ich den Fred hier derzeit etwas einschlafen lasse, habe im Moment zu viel Arbeit und die Weihnachtszeit tut Ihr übriges dazu. Da fehlt leider etwas die Zeit für´s Hobby.
    Ich habe aber immer mal zwischendurch etwas „rumprobiert“ hier mal ein Update was ich bisher draus gemacht habe.

    Mit dem Code von ploco hab ich das Ganze erst mal zum Laufen bekommen, sogar so wie ich es wollte.

    $last_points = "0";
    
    while ($ausgabe = mysql_fetch_array ($result)){ 
    if ($last_poins == "0")  {
    $last_points = $ausgabe[punkte];
    }
    $point_diff = $last_points - $ausgabe[punkte] ;
    if ($point_diff == "500")
    {
    	$wb_ende_ermittelt = "<b>WB geloggt</b>";
    }
    else 
    {
    	$wb_ende_ermittelt = "";
    }


    Bei dem anderen Codestück komme ich nicht wirklich klar, da es auf die Art aber anscheinend schneller gehen würde versuche ich noch hinter den Code zu steigen.
    sebulon schrieb:
    Hi,

    hier der versprochene Code:
    SELECT ABS(`punkte` - (SELECT `punkte` from `pointlogger_koeln_01` where `id` = '$ID_1')) as ergebnis 
    FROM `pointlogger_koeln_01`
     WHERE `id` = '$ID_2';
    ;
    ;



    Wenn ich das richtig verstehe, dann wird hier von den aktuellen Punkten, die vorhergehende Punktzahl abgezogen, also immer die vorhergehende ID abgezogen. Was ich nicht verstehe ist, woher kommt
    $ID_1
    im
    where `id` = '$ID_1'
    ? Ich definiere
    $ID_1
    ja nirgends vorher. Das gleiche dann beim nächsten WHERE
    WHERE `id` = '$ID_2'; mit $ID_2'.


    Ich bekomme auch keine Ausgabe damit hin, ich habe den Code immer nach meinem ersten SELECT eingefügt.


    $dbabfrage = "SELECT * FROM pointlogger_{$city_auswahl} WHERE id='$id_sort' ORDER BY date DESC";
    $dbabfrage_points = "SELECT ABS(`punkte` - (SELECT `punkte` from `pointlogger_koeln_01` where `id` = '$ID_1')) as ergebnis 
    FROM `pointlogger_koeln_01`
     WHERE `id` = '$ID_2'";
    ;
    ;


    So das ist mal der aktuelle Stand zum Thema, sorry nochmal das ich derzeit nicht so aktiv am Thema geblieben bin, nach Weihnachten ist das Leben dann wieder etwas ruhiger und das Hobby bekommt wieder mehr Zeit ab.

    Ich danke Euch wie immer für die Tipps und die Hilfe, immer wieder super hier.
    Nen fröhliches Weihnachtsfest und ein paar besinnliche Tage wünsche ich Euch natürlich auch.

    LG Marco


  8. $ID1 und $ID2 sind einfach nur platzhalter für Variablen, die du über PHP übergibst, irgendwie musst du dem ja sagen, die differenz zwischen welchen Einträgen er berechnen soll... und da du oben dich dieser Schreibweise bedient hast, dachte ich mir, das wäre klar...
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!