Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „MySQL Update Problem“

xxxsharkyxxx

Siebenschläfer

Hallo, folgendes Problem: Ich bin arbeite gerade an einem Skript, dass zeigen soll, wer gerade online ist.
Ich habe die Tabelle "profil" die folgendermassen aufgebaut ist:
¦ name ¦ online ¦ aktiv ¦

Ein Datensatz könnte etwa folgendermassen aussehen:

¦ peter ¦ 169 ¦ 1242062804 ¦

Bei der Spalte "aktiv handelt es sich um eingetragene Timestamps. Immer wenn jemand die Seite aktualisiert / bzw. online kommt, wird die Spalte "aktiv" mit dem aktuellen Timestamp aktualisiert. Im Feld "online" soll dann die Differenz zwischen der aktuellen Zeit und dem letzten Timestamp eingetragen werden. Also die Anzahl Sekunden die Verstrichen sind, seit der user die Seite das letzte mal aufgerufen hat.
Und da steh ich momentan auf dem Schlauch. Kann mir wer helfen wie ich das hinkriege? Folgendes hab ich mal probiert:

PHP:
        <?php
    $dbdate = "SELECT aktiv FROM profil";
    $query = mysql_query($dbdate);
    
    while ($dsatz = mysql_fetch_assoc($query))
    {
        $mktime = mktime();
        $differenz = $mktime - $dsatz["aktiv"];
        $dbaktiv = "UPDATE profil SET online = '$differenz'";
        $query2 = mysql_query($dbaktiv);
    }
    ?>
Allerdings werden hier alle Werte der Spalte "online" durch den selben Wert ersetzt (der Letzte Datensatz der durch die while-Schleife geht) Ich will aber, dass bei jedem Datensatz die jeweilige Differenz eingetragen wird.

Kurz: Von jedem Datensatz soll der Wert der Spalte "aktiv" aus der DB geholt werden. Dieser soll dann vom aktuellen timestamp abgezogen werden und das Resultat anschliessend in die Spalte "online" eingetragen werden (--> Update). Dieser Vorgang soll für alle Datensätze gemacht werden.
Ich hoffe ich habe mich einigermassen verständlich ausgedrückt.
Kann mir da jemand weiterhelfen?

grüsse sharky
 
Zuletzt bearbeitet:

Doitsu

Aktives Mitglied

AW: MySQL Update Problem

Hm, is klar: du hast ja auch keine where klausel:

PHP:
<?php
$dsatz = array();

    $dbdate = "SELECT `name`, `aktiv` FROM `profil`";
    $query = mysql_query($dbdate);
    while( $row = mysql_fetch_assoc($query)){
        array_push($dsatz,$row);
    }
    for($i=0;$i<count($dsatz);$i++) {
        $mktime = mktime();
        $differenz = $mktime - $dsatz[$i]["aktiv"];
        $dbaktiv = "UPDATE `profil` SET `online` = '". $differenz ."' WHERE `name` = '". $dsatz[$i]["name"] ."'";
        mysql_query($dbaktiv);
    }
?>

Versuchs mal so irgendwie.
 

xxxsharkyxxx

Siebenschläfer

AW: MySQL Update Problem

Dachte ich zuerst auch... aber ich habs dann nicht so ganz hingekriegt... Und dachte mir dann, dass es so einfacher geht mit zwei Spalten in der Mysql-Tabelle. Ich hole von der Tabelle dann jeweils alle Namen, deren Differenz kleiner als 300 ist... Also eine Aktivität in den letzten 5 Minuten stattgefunden hat... Wie würdest es du denn genau machen mit nur einem Feld?

@Doitsu: Vielen Dank für deine Ausführung. Funktioniert wunderbar. An die Where-Klausel habe ich auch gedacht, allerdings wäre ich nicht auf die for-schleife bzw. auf das count gekommen....

grüsse sharky
 

r3nt5ch3r

~ Allround pG ~

AW: MySQL Update Problem

...deren Differenz kleiner als 300 ist...Also eine Aktivität in den letzten 5 Minuten stattgefunden hat...
...WHERE aktiv > ".time()-300."...

weiß net ob ich richtig gedacht hab, aber so in etwa ist die lösung^^ Außerdem würde es bei deiner Lösung, bei jedem Klick u.U. unzählige Updates geben - was an der Stelle wirklich total überflüssig ist...

@Doitsu: Vielen Dank für deine Ausführung. Funktioniert wunderbar. An die Where-Klausel habe ich auch gedacht, allerdings wäre ich nicht auf die for-schleife bzw. auf das count gekommen....
du brauchst auch keine for-schleife oder das count - oder hab ich was übersehen?^^

PHP:
    $dbdate = "SELECT * FROM profil";
    $query = mysql_query($dbdate);
    
    while ($dsatz = mysql_fetch_assoc($query))
    {
        $mktime = mktime();
        $differenz = $mktime - $dsatz["aktiv"];
        $dbaktiv = "UPDATE profil SET online = '$differenz' WHERE `name` = '". $dsatz["name"] ."'"; ;
        $query2 = mysql_query($dbaktiv);
    }
du solltest dringend einen Primärschlüssel einfügen, anhand des Namens einen Datensatz zu identifizieren ist schrott^^
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.188
Beiträge
2.582.071
Mitglieder
67.257
Neuestes Mitglied
Can Ergin
Oben