dateline - Tabelle in xmb_posts

Begonnen von , 24 April 2002, 12:40:16

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Hi!

Ich verstehe die Angaben in dem dateline-Feld nicht. Wie kann ich es auslesen? D.h. ich möchte für das Punkte-System eine Abfrage machen, dass nur Beiträge gezählt werden, die nach einem bestimmten Datum geschrieben wurden. Mit dem alten Forum ging das so:

$result= mysql_query("select post_id from forum_posts where poster_id='$uid' and post_time >='2001-12-07 10:00'");
    $fposts=mysql_num_rows($result);
    $result= mysql_query("select topic_id from forum_topics where topic_poster='$uid' and  topic_time >= '2001-12-07 10:00' ");
    $ftopics=mysql_num_rows($result);

Die neue Angabe fürs XMB ist ja:

$result= sql_query("select pid from $prefix"._xmb_posts." where author='$uname' and  topic_time >= '2001-12-07 10:00'", $dbi);
    $fposts=sql_num_rows($result, $dbi);
    $result= sql_query("select tid from $prefix"._xmb_threads." where author='$uname' and  topic_time >= '2001-12-07 10:00'", $dbi);
    $fthreads=sql_num_rows($result, $dbi);

Was muss ich anstelle des "topic_time >= '2001-12-07 10:00'" einsetzen?

Danke & Gruß, ThomasK

DarkBoy

Hi
 das muss ich mir mal anschauen, da  im XForum auch die Datenagaben vershlüsselt sind

ThomasK

Das wäre echt toll! :)
Ich schaue morgen wieder vorbei... wenn Du noch Angaben brauchst, melde Dich einfach!

Danke sehr!
Thomas#

 :)

ThomasK

Ich schiebe mich nochmal nach oben und stelle die Frage, wie man es realisieren kann, dass nur die Beiträge ab einem bestimmten Datum aus dem XMB-Forum ausgelesen werden. Da die Punkte momentan für die Poster nicht gezählt werden, ist es für mich recht dringend... :0

Ich danke Euch schön! Thomas#


ThomasK

Ach kommt schon, Leute, kann mir wirklich keiner sagen, wie man das Feld "dateline" ausliest, bzw. die Zahlenkombinationen entschlüsselt?

1018342204

999791640

1000076040

1000162320

1003347660

z.B.?

Ich kann da echt kein Muster erkennen...  :cry

Bitte, bitte, bitte!

CU

DarkBoy

Hi
 das es keine linie drinn gibt  sollte ja auch son sein :) das haben verschlüsselungen so an sich !
Ich ahbe auch keinen Weg gefunden das zu ändern. Sorry aber   so kannst du es nicht anwenden dann .

ThomasK

Hm, das wäre wirklich schade, da dann mein Gewinnspiel nicht mehr läuft. Wir hatten extra eine zweite Runde gemacht, d.h. dass ab einem bestimmten Datum die Punkte wieder auf "0" gesetzt werden und die Abfragen auf das Anfangsdatum verweisen, damit die Punkte nicht wieder erscheinen. Ich hatte dazu mal eine Anleitung geschrieben:

 http://www.netz-id.de/article.php?sid=830

Gibt es denn eine andere Möglichkeit, die Punkte, d.h. die Beiträge vor dem 7.12.2001 nicht mitzuzählen...?

Muss ich das Auszählen des Forums dann endgültig begraben. *heul*

 :cry  :cry  :cry

CU, Thomas#

Micro

Ähem .. Moment mal .. das ist doch UNIX Zeit oder?

Nix einfacher als das. Damit kann man nämlich endlich rechnen ;o)

Kurze Erklärung.
time() ist ein Unix Zeitstempel der von Beginn der UNIX Epoche an gezählt wird in Sekunden. Ausgangsdatum und Zeit sind der 01.01.19070, 00:00 Uhr.

Also, Du musst nun nur die Sekunden zurückrechnen.

1 Minute = 60 Sek.
1 Stunde = 3600 Sek.
1 Tag = 86.400 Sek.

Es gibt mehrere Möglichkeiten das in ein aktuelles Datum mit Zeitangabe zu übersetzen.

Ich möchte hier mal nicht mit einem Beispiel aufwarten, da es mehrere Möglichkeiten gibt das anzuzeigen.

Mirko
[Bearbeitet am: 28/4/2002 von Micro]

ThomasK

Erstmal heißen Dank für den Tipp!

Leider kenne ich mich mit den Zeitfunktionen noch nicht besonders aus. Ich habe hier  http://www.selfphp.info/funktionsuebersicht/datum_zeit_funktionen.php#gmmktime eine Funktionsbeschreibung gefunden, wie man den UNIX-Timestamp aus der Datenbank wieder in die "normale" Zeitangabe umwandelt. Leider weiß ich nicht, wie ich die Abfrage in diesem speziellen Fall mache. Außerdem bleibt noch die Frage im Raum, wie ich diese Abfrage für mein Punktesystem anpasse.

Vielleicht kann mir einer von Euch "Spezies" da weiterhelfen? Wäre echt klasse!

CU, T.#

Micro

Du bist doch fast auf dem richtigen Weg.
Du hast doch schon die Angabe der richtig geschriebenen Zeit in der neuen Abfrage gemacht. Nun musst Du doch eigentlich den Wert '2001-12-07 10:00' in Unix Zeit übersetzen bzw. zurückrechnen und statt des "normal" ersichtlichen Datums.

Frage; Wie viele Tage sind es denn vergangen bis zum 07.12.2001?

90 Tage (als Beispiel) vergangen, würden bedeuten, 86.400 x 90 = 7776000 Sekunden.

Somit hättest Du immer nur die letzten 90 Tage in der Auswertung.

Soweit zum einfachen Teil der Aufgabe.

Nun hast Du ja den Anspruch AB dem Zeitpunkt X zu werten. Das macht die Aufgabe auch recht einfach.
Zur Erklärung in Worten; HEUTE – DATUM VOM = variabler Wert

Also; HEUTE [date()] – DATUM VOM [Eindeutiger Wert] = Differenz [$ReferenzVariable für die DB Abfrage]

Das kannst Du nun übersetzen so wie Du willst.
Um das Eingabe Datum in lesbares Datum zu übersetzen würde folgendes ausreichen.

$anzeige_zeit = date("d.m.Y H:i", strftime(($heute - $referenzvariable)));

ThomasK

Danke nochmal für die Hilfe. Aber kann es nicht auch einfacher gehen. Im Grunde geht es doch darum, dass die Beiträge vor einem Bestimmten Datum (7.12.) nicht gezählt werden. D.h. man darf nur die Beiträge aus der DB aufrufen, die größer sind als der Sekundenwert für dieses Datum.

Ich habe jetzt ein wenig gerechnet:
Von 1.1.1970 bis 7.12.2001 sind es 31*365 Tage, dazu 8 Schalttage und 341 Tage im Jahr 2001.

Multipliziert mit 86400 Sekunden pro Tag sind das insgesamt 1.007.769.600 Sekunden. Auf ein paar Stunden mehr oder weniger kommt es ja nicht an ;-)

OK. Nun haben wir doch folgenden Fall, oder?

$result= sql_query("select pid from $prefix"._xmb_posts." where author='$uname' and dateline >= '1007769600 '", $dbi);
    $fposts=sql_num_rows($result, $dbi);
    $result= sql_query("select tid from $prefix"._xmb_threads." where author='$uname' and dateline >= '1007769600 '", $dbi);
    $fthreads=sql_num_rows($result, $dbi);

Das bedeutet, dass nur die Einträge gezählt werden, die im Feld dateline einen Unix-Timestamp haben, der größer oder gleich der Anzahl der Sekunden ist.

Aber trotzdem werden für neue Beiträge die Punkte nicht gezählt.  :cry

Vielleicht habe ich ja einen Denkfehler, aber durch Deine Erklärungen bin ich nicht ganz durchgestiegen...

 
ZitatNun hast Du ja den Anspruch AB dem Zeitpunkt X zu werten. Das macht die Aufgabe auch recht einfach.
Zur Erklärung in Worten; HEUTE – DATUM VOM = variabler Wert

Also; HEUTE [date()] – DATUM VOM [Eindeutiger Wert] = Differenz [$ReferenzVariable für die DB Abfrage]

Das kannst Du nun übersetzen so wie Du willst.
Um das Eingabe Datum in lesbares Datum zu übersetzen würde folgendes ausreichen.

$anzeige_zeit = date("d.m.Y H:i", strftime(($heute - $referenzvariable)));  

Ich brauche schließlich keine Ausgabe des Datums, sondern es sollen ja nur die Beiträge ab einem bestimmten Datum für die Punkte gezählt werden.

Danke! Thomas#

Micro

Perfekt gemacht. Hut ab, Du lernst schnell ;o)

Soweit ist das eine Problem schon mal gelöst. Es mag auf den ersten Blick umständlich sein, aber man kann besser Zeiten berechnen und muss dann nur die Ausgabe in ein lesbares Format umsetzen.

Zum Rest stellen sich mir die Haare zu Berge. Denn was es nun mit den Userpunkten auf sich hat, da bin ich im Moment überfragt. Weil damit hab ich echt nix am Hut und auch noch nicht beschäftigt. (Is Kinderkram meiner Meinung nach und wird nicht wirklich benötigt).
Deshalb hoffe ich das da ein anderer etwas dazu sagen kann ;o)

Mirko

ThomasK

Hi Micro und hi alle, die an der Lösung interessiert sind!

Ich habe sie in dem vorletzten Beitrag schon geschrieben. Dass es damit nicht funktionierte, lag daran, dass ich die Threads mit "0" multipliziert habe. Merke: 1000 mal nix ist immer noch nix... Also war die Angabe mit den "Unix-Sekunden" genau der richtige Hinweis.

Vielen Dank! Jetzt klappt alles. Zu sehen hier: http://www.jugendaufachse.de/portal/modules.php?op=modload&name=Gewinnspiel&file=index

Gruß, Thomas#

DarkBoy

Hi
jetzt ziehe ich aber auch den HUT !  das hasste super gemacht! Doch ein grosser Aufwand für  ein "paar" Userpoints :)
Aber  das ist doch mal ne nachricht das es nun geht!