PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Datumsfunktion - Wie viele User waren letzten Monat Online?


ksticker
16.01.2008, 22:53:38
Hy Members!!!

Ich bin eben auf folgendes Problem gestoßen, und zwar möchte ich abfragen wie viele User letzten Monat online waren.

Meine SQL-Tabelle (Online) sieht wie folgt aus

|IP ||Datum |Zeit ||Username |Status
----------------------------------------------------------------------
217.286.15.2 |15 Jan 2008 |18:18:11|KSTICKER |Offline
217.286.15.3 |16 Jan 2008 |18:19:45|KSTICKER |Member
217.286.15.2 |16 Dez 2007 |15:12:31| |Gast

Su nun möchte ich eine SQL-Abfrage in der Art machen:

Select * From Online Where Datum = * Dez * (Gut nun ist noch das Problem mit dem Jahr)

Wie kann ich so etwas realisieren?
PS. In meiner Statistik soll immer die anzahl der Besuche des aktuellen Monats angezeigt werden.

Das gleiche würde ich gerne immer auf den gestrigen Tag anwenden.

Hier meine Scripts, ich habe schon ein Script für das Gestrige Datum geschrieben, aber was ist wenn es der erste des monates ist also Z.B: 01 Jan 2008?



<!--ERSTES BETRETEN DER SEITE-->

<?php
#Grundabfrage Online
$base_online = mysql_query("SELECT * FROM Online");


#anzahl gaeste auslesen im moment
$gast_now_count = mysql_query("SELECT * FROM Online WHERE Status = 'Gast'");
$gast_now_count_ausgabe = mysql_num_rows($gast_now_count);

#anzahl Member auslesen im moment
$user_now_count = mysql_query("SELECT * FROM Online WHERE Status = 'Member'");
$user_now_count_ausgabe = mysql_num_rows($user_now_count);

#anzahl besuche heute auslesen
$today_count = mysql_query("SELECT * FROM `Online` WHERE Datum = '".date("d M Y")."' ");
$today_count_ausgabe = mysql_num_rows($today_count);

#registrierte Useranzahl angeben
$sum_user = MYSQL_QUERY( "SELECT * FROM User");
$sum_user_ausgabe = mysql_num_rows($sum_user);

#neusten User angeben
$maxid_user = MYSQL_QUERY( "SELECT max(UserID) AS UserID FROM User");
$maxid_user_ausgabe = mysql_fetch_assoc($maxid_user);
$username = MYSQL_QUERY( "SELECT Username FROM User WHERE UserID = '".$maxid_user_ausgabe['UserID']."'");
$username_ausgabe = mysql_fetch_assoc($username);

#anzahl der gesendeten nachrichten angeben
$maxid_NachNummer = MYSQL_QUERY( "SELECT max(NachNummer) AS NachNummer FROM Messages");
$maxid_NachNummer_ausgabe = mysql_fetch_assoc($maxid_NachNummer);

#anzahl neuer Member angeben
$datum = date('d.m.y');
$today_register = MYSQL_QUERY( "SELECT * FROM User Where RegDate = '".$datum."'");
$today_register_ausgabe = mysql_num_rows($today_register);

#datensatz updaten wenn nach angegebener Zeit keine reaktion festgestellt wurde
#unterscheiden zwischen member und gast
#MEMBER
if ($base_online['Status'] == "Member"){
mysql_query("UPDATE Online SET Status = 'Offline' WHERE DATE_SUB(NOW(), '%H','%i','%s',INTERVAL 5 Second) > Zeit");
#GAST
}elseif ($base_online['Status'] == "Gast"){
mysql_query("UPDATE Online SET Status = 'Offline' WHERE DATE_SUB(NOW(), '%H','%i','%s',INTERVAL 5 Second) > Zeit");
#OFFLINE
}else{};

#Gestriges Datum heraus finden
$gestern_day = date('d') - 1;
$gestern_mon = date('M');
$gestern_jah = date('Y');
$gestern = $gestern_day.' '.$gestern_mon.' '.$gestern_jah;

#gestrige Besucherzahl heraus finden
$yesterday_count = mysql_query("SELECT * FROM `Online` WHERE Datum = '".$gestern."' ");
$yesterday_count_ausgabe = mysql_num_rows($yesterday_count);

?>

knight1
18.01.2008, 14:46:17
Hy Members!!!

Ich bin eben auf folgendes Problem gestoßen, und zwar möchte ich abfragen wie viele User letzten Monat online waren.

Meine SQL-Tabelle (Online) sieht wie folgt aus

|IP ||Datum |Zeit ||Username |Status
----------------------------------------------------------------------
217.286.15.2 |15 Jan 2008 |18:18:11|KSTICKER |Offline
217.286.15.3 |16 Jan 2008 |18:19:45|KSTICKER |Member
217.286.15.2 |16 Dez 2007 |15:12:31| |Gast

Su nun möchte ich eine SQL-Abfrage in der Art machen:

Select * From Online Where Datum = * Dez * (Gut nun ist noch das Problem mit dem Jahr)

Wie kann ich so etwas realisieren?
PS. In meiner Statistik soll immer die anzahl der Besuche des aktuellen Monats angezeigt werden.

Das gleiche würde ich gerne immer auf den gestrigen Tag anwenden.

Hier meine Scripts, ich habe schon ein Script für das Gestrige Datum geschrieben, aber was ist wenn es der erste des monates ist also Z.B: 01 Jan 2008?



<!--ERSTES BETRETEN DER SEITE-->

<?php
#Grundabfrage Online
$base_online = mysql_query("SELECT * FROM Online");


#anzahl gaeste auslesen im moment
$gast_now_count = mysql_query("SELECT * FROM Online WHERE Status = 'Gast'");
$gast_now_count_ausgabe = mysql_num_rows($gast_now_count);

#anzahl Member auslesen im moment
$user_now_count = mysql_query("SELECT * FROM Online WHERE Status = 'Member'");
$user_now_count_ausgabe = mysql_num_rows($user_now_count);

#anzahl besuche heute auslesen
$today_count = mysql_query("SELECT * FROM `Online` WHERE Datum = '".date("d M Y")."' ");
$today_count_ausgabe = mysql_num_rows($today_count);

#registrierte Useranzahl angeben
$sum_user = MYSQL_QUERY( "SELECT * FROM User");
$sum_user_ausgabe = mysql_num_rows($sum_user);

#neusten User angeben
$maxid_user = MYSQL_QUERY( "SELECT max(UserID) AS UserID FROM User");
$maxid_user_ausgabe = mysql_fetch_assoc($maxid_user);
$username = MYSQL_QUERY( "SELECT Username FROM User WHERE UserID = '".$maxid_user_ausgabe['UserID']."'");
$username_ausgabe = mysql_fetch_assoc($username);

#anzahl der gesendeten nachrichten angeben
$maxid_NachNummer = MYSQL_QUERY( "SELECT max(NachNummer) AS NachNummer FROM Messages");
$maxid_NachNummer_ausgabe = mysql_fetch_assoc($maxid_NachNummer);

#anzahl neuer Member angeben
$datum = date('d.m.y');
$today_register = MYSQL_QUERY( "SELECT * FROM User Where RegDate = '".$datum."'");
$today_register_ausgabe = mysql_num_rows($today_register);

#datensatz updaten wenn nach angegebener Zeit keine reaktion festgestellt wurde
#unterscheiden zwischen member und gast
#MEMBER
if ($base_online['Status'] == "Member"){
mysql_query("UPDATE Online SET Status = 'Offline' WHERE DATE_SUB(NOW(), '%H','%i','%s',INTERVAL 5 Second) > Zeit");
#GAST
}elseif ($base_online['Status'] == "Gast"){
mysql_query("UPDATE Online SET Status = 'Offline' WHERE DATE_SUB(NOW(), '%H','%i','%s',INTERVAL 5 Second) > Zeit");
#OFFLINE
}else{};

#Gestriges Datum heraus finden
$gestern_day = date('d') - 1;
$gestern_mon = date('M');
$gestern_jah = date('Y');
$gestern = $gestern_day.' '.$gestern_mon.' '.$gestern_jah;

#gestrige Besucherzahl heraus finden
$yesterday_count = mysql_query("SELECT * FROM `Online` WHERE Datum = '".$gestern."' ");
$yesterday_count_ausgabe = mysql_num_rows($yesterday_count);

?>


Zuerst mal folgendes.
Mit diesem hier
Select * From Online Where Datum = * Dez *
Prüfst Du ob die Zeichenfolge * Dez * vorhanden ist.

Um auf eine Teilzeichenfolge zu Prüfen gibt es die Möglichkeit mit LIKE zu arbeiten.

Nehmen wir folgendes Beispiel:
Es sollen alle Datensätz zurückgeliefert werden, welche in dem Datums-Feld die Zeichenfolge Dez enthält.

Dazu kann man folgenden Query bauen:
SELECT * FROM `Online` WHERE `Datum` LIKE '%Dez%'

Dieser Query liefert alle Datensätze zurück welche an irgendeiner stelle in der Gesamtzeichenfolge des Datums-Feldes die Teilzeichenfolge Dez enthält. Dafür sind die %-Zeichen gut.

Was das zusätzliche Prüfen auf das Jahr angeht, muss man vorher besteimmen in welchem monat man sich gerade befindet. Wenn man dann feststellt dass man sich im Januar befindet muss man logischerweiße als das zu prüfende Jahr das aktuelle Jahr minus 1 nehmen. Ansonsten nimmt man das aktuelle Jahr als Suchbasis.

Der Query ändert sich sich dann in den folgenden:

SELECT * FROM `Online` WHERE `Datum` LIKE '%Dez $jahr%'

Die Variable $jahr wird dir von PHP aus deiner Rechnung geliefert auf welches Jahr geprüft werden soll. Eventuell musst Du die Variable folgendermaßen angeben: ".$jahr." oder {$jahr}.


Kai aka Knight1

ksticker
18.01.2008, 18:04:44
Ok, danker werd es mal versuchen, ab das datum nun auf 3 tabellen aufgeteilt Tag,Monat,Jahr und alles als zahl, damit es sich besser rechnen lässt, vielen dank für deine antwort