• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Anz. der Einträge von heute, gestern usw. ermitteln (MySQL)

  • Ersteller Ersteller ohrflieger
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
O

ohrflieger

Guest
Abend,

Ich habe eine Besuchertabelle mit einer Spalte "datum" im Format DATETIME.
Jetzt möchte ich die Anzahl der Einträge von heute, gestern, diesem Monat und dieses Jahres "herausfiltern".
Ich weiß nur nicht, wie ich das anstellen soll. Die Funktion DATE_SUB hilft ja soweit nicht viel weiter, da z. B. bei INTERVAL 1 DAY alle Einträge der letzten 24 Stunden angezeigt werden und nicht die von heute.
Und dass das Format des Feldes YYYY-MM-DD HH:MM:SS ist, macht es auch schwerer.

Wie kann man das möglichst unkompliziert lösen?
 
"select count(*) from besuchertabelle
where datum like '2008-01%'"
/* Besucher im Januar */
oder
...
where datum like '2008-%'

/* Besucher im Jahr 2008 */
 
Das klappt nicht. "You have an error in your Syntax;..."

EDIT:
Hab jetzt ein aufwendiges Script entwickelt...

Für solche mit dem selben Problem hier eine Lösung (datum = DATE/DATETIME):

PHP:
//ENTWICKELT VON OHRFLIEGER (ohrflieger.de)
$end_heute = 0;
$end_gestern = 0;
$end_monat = 0;
$end_lmonat = 0;
$end_jahr = 0;
$end_ljahr = 0;

//Bestimmung des Schaltjahres
function schaltjahr($jahr)
{
  if($jahr % 400 == 0) {
   return true;
  } elseif($jahr % 4 == 0 && $jahr % 100 != 0) {
   return true;
  } else {
   return false;
  }
}


//vergleichsdaten bestimmen
$heute = date("Y-m-d");
$monat = date("Y-m");
$jahr = date("Y");
$ljahr = intval($jahr) - 1;

//letzten Monat bestimmen
if(date("n") != "1") {
$lmonat = $monat - 1;
  if(strlen($lmonat) == 1) {
  $lmonat = $jahr."-0".$lmonat;
  } else {
  $lmonat = $jahr."-".$lmonat;
  }
} else {
$lmonat = $ljahr."-12";
}

//gestern bestimmen
if(date("j") != "1") {
$gestern = date("j") - 1;
  if(strlen($gestern) == 1) {
  $gestern = $monat."-0".$gestern;
  } else {
  $gestern = $monat."-".$gestern;
  }
} else {//Tag == 1
  if(schaltjahr($jahr)) {
  $feb = "29";
  } else {
  $feb = "28";
  }            //Dez  Jan  Feb  Mär ...
$mons = array('','31','31',$feb,'31','30','31','30','31','31','30','31','30');
  if($date("n") != "1") {
  $gestern = $jahr.date("-m-").$mons[date("n")];
  } else { //Monat = Januar
  $gestern = $ljahr."-12-31";
  }
}

$sql1 = "SELECT datum FROM Besucher";
$res1 = mysql_query($sql1) OR die(mysql_error());

while($row1 = mysql_fetch_array($res1)) {
  $rowday = substr($row1["datum"],0,10);
  $rowmon = substr($row1["datum"],0,7);
  $rowjar = substr($row1["datum"],0,4);
  if($rowday == $heute) {
   $end_heute++;
  }
  if($rowday == $gestern) {
   $end_gestern++;
  }
  if($rowmon == $monat) {
   $end_monat++;
  }
  if($rowmon == $lmonat) {
   $end_lmonat++;
  }
  if($rowjar == $jahr) {
   $end_jahr++;
  }
  if($rowjar == $ljahr) {
   $end_ljahr++;
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Für die Zukunft empfehle ich dir, die Zeit als timestamp in ein bigint zu speichern.
Damit kann man viel einfacher umgehen.

Dein Script ist wirklich kompliziert
PHP:
<?php
/*
** $result sei das Ergebnis aus der Datenbank, abfrage aller Einträge
*/
while($row = mysql_fetch_METHOD($result)) {
   /*
   ** $dbdate sei das Datum aus der Datenbank
   */
   $timestamp = strtotime($dbdate);
   $today = mktime(0,0,0,date("m"),date("d"),date("Y"));
   if($timestamp >= $today && $timestamp < strtotime("+1 day",$today)) {
      //ist von heute
   }
   if($timestamp >= strtotime("-1 day",$today) && $timestamp < $today) {
      //ist von gestern
   }
   //usw.
}
?>
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben