Counter

Der müsste mir doch jetzt 2 ausspucken weil in der Datenbank sind für den 26 zwei einträge
Auspucken tut es mir aber 1

Und warum benutzt du jetzt DATEDIFF und nicht mehr den ersten CODE mit DATE_SUB?
Zu meiner obrigen frage #17 nochmal. Kann DATE_SUB keine Zahlen ausgeben sondern nur Datums?
 
Dann musst du das gespeicherte Datum vorher formatieren, die Abfrage sieht dann so aus:

SQL:
SELECT COUNT(*) AS user FROM test WHERE DATE_FORMAT(tag, "%Y-%m-%d") = DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Ich würde DATEDIFF nehmen, ist kürzer.

Wie wertest du die Abfrage aus, mit dem Wert von "user" oder mit mysql_num_rows? Letzteres liefert 1 das ist richtig weil nur ein Datensatz geliefert wird. Aber "user" enthält den richtigen Wert, habe ich dir auch oben geschrieben.
 
Danke jetzt funktioniert es :-)
Stimmt, ich hatte mysql_num_row, aber wieso das nicht damit geht ? bzw. wo ist da der unterschied bei $rs
 
Also ich habe das jetzt so gemacht, und so scheint es zu gehen.

Was hälst Du davon?


SQL:
$sql = "SELECT * FROM $online WHERE DATE_FORMAT(tag, '%Y-%m-%d') = DATE_SUB(CURDATE(), INTERVAL 1 DAY)";
$result = mysql_query($sql); 
$user_gestern = mysql_num_rows($result);
 
Wie schon geschrieben, ich würde die DATEDIFF Version in Verbindung mit COUNT und LIMIT nehmen. Ist eine einfachere Anweisung und meiner Meinung nach auch besser zu lesen.

mysql_num_rows liefert die Anzahl der Datensätze die die eintsprechende Abfrage liefert. Da musst du dann aber erstmal X Datensätze auslesen obwohl du nur die Anzahl haben willst.

Wenn du die COUNT Funktion und LIMIT nimmst, dann bekommst du einen Datensatz zurück der aber die Anzahl Datensätze als Feldwert liefert. Ich finde diese Lösung besser.
 
ok danke
und was hälst du von meinen code den ich jetzt als letztes gepostet habe ?
oder war das jetzt bereits deine antwort gewesen mit mysql_num_row?

Frage jetzt deshalb weil ....Bin jetzt etwas verwirrt da ich davor schon mal gefragt hatte warum das mit mysql_num_row falsch anzeigt mit 1

weiß jetzt nicht auf welche meine frage deine antwort bezogen ist

Ansosnten Danke für deine hilfe.
Jetzt geht es so wie ich das haben wollte ;-)
 
Die Antwort hat sich schon auf den Beitrag #24 bezogen.

Also wenn du eine Abfrage an die Datenbank schickst, dann bekommst du mit mysql_num_rows die Anzahl der Datensätze die diese Abfrage liefert.

Angenommen du hast jetzt tausende von Besuchern auf der Seite und machst die Abfrag wie von dir oben geschrieben, dann bekommst du z.B. 9.876 Datensätze (und die ganzen Daten) zurück obwohl du nur die Gesamtzahl brauchst.

Wenn du die Abfrage wie zuletzt von mir geschrieben nimmst, wird die Anzahl bereits in der Abfrage ermittelt, es wird nur der Wert eines Felder ( COUNT(*) ) in einem Datensatz ( LIMIT 1 ) geliefert.

Da du nur einen Datensatz zurück bekommst, ergibt hier mysql_num_rows natürlich auch nur die Zahl 1.
 
Danke tombe
Bissle versteh ich es jetzt :-)
Und kannst du mir noch sagen wie dieser Code sich zu deinem DATEDIFF unterscheidet ?
SQL:
$sql = "SELECT * FROM $online WHERE DATEDIFF(NOW(), tag) = 1";
 
Du meinst diese Abfrage:

SQL:
SELECT COUNT(*) AS user FROM deine_tabelle WHERE DATEDIFF(CURDATE(), tag) = 1 LIMIT 1

Mit "COUNT(*) AS user" wird ein Feld mit Namen "user" erzeugt das als Wert die Anzahl Datensätze enthält die die Abfrage liefert.

"CURDATE" gibt einen Wert vom Typ "2011-04-29" also das Datum zurück, NOW gibt hier zusätzlich auch noch die Uhrzeit mit zurück "2011-04-29 14:18:35". Wobei für die Abfrage das Datum alleine reicht.

"LIMIT 1" ist genau genommen sogar unnötig da die Abfrage eh nur einen Datensatz zurückgibt. MySQL beendet dadurch aber auch wirklich gleich nachdem das erste Ergebnis ermittelt wurde die Abfrage.
 
Zurück