PHP Datum

Flooow

Mitglied
Guten Abend,

habe eine kleine Mysql Abfrage

Code:
$abfrage = "SELECT COUNT(DISTINCT start_stamp) AS inbound
                            FROM cdr 
                                WHERE destination_number 
				   LIKE 'Taube' and duration>15 and DATE(start_stamp) BETWEEN  '$startdatum%' and '$enddatum%' ";
startdatum (bsp.2013-04-05) und enddatum gibt der Endbenutzer jeweils in einem seperaten textfeld an( nur das datum, nicht die Zeit) , funktioniert auch wunderbar.

Ich muss jetzt aber mit der Uhrzeit weiterarbeiten. Also an das übergebene startdatum soll eine Uhrzeit direkt in der Abfrage angefügt werden.


Code:
$abfrage = "SELECT COUNT(DISTINCT start_stamp) AS inbound
                            FROM cdr 
                                WHERE destination_number 
				   LIKE 'Taube' and duration>15 and
                                           DATE(start_stamp) BETWEEN  '$startdatum 08:00:00' and '$startdatum 09:00:00%' ";
Ich dachte mir das es vielleicht so funktionieren könnte , aber das wäre wohl zu einfach gewesen.

Hat jemand einen tipp?
 
Was ist start_stamp für ein Typ? Wenn es TIMESTAMP ist, lass DATE weg und füge TIMESTAMP und die beiden anderen Operanden. Also z.B. so:

Code:
SELECT COUNT(DISTINCT start_stamp) AS inbound
                            FROM cdr 
                                WHERE destination_number 
                   LIKE 'Taube' and duration>15 and
                                           start_stamp BETWEEN  TIMESTAMP('$startdatum 08:00:00') and TIMESTAMP('$startdatum 09:00:00%')
 
Dann leg TIMESTAMP mal statt DATE an:

Code:
SELECT COUNT(DISTINCT start_stamp) AS inbound
                            FROM cdr 
                                WHERE destination_number 
                   LIKE 'Taube' and duration>15 and
                                           TIMESTAMP(start_stamp) BETWEEN  TIMESTAMP('$startdatum 08:00:00') and TIMESTAMP('$startdatum 09:00:00')

Ich war mal so frei und hab das fehlerhafte % hinter 09:00:00 entfernt.
 
Ich glaub meine Abfrage ist nicht ganz passend...

Ich habe ja nun nur die Sammlung der Daten vom Anfangsdatum ..

Ausgabe sieht so aus:

Eingang Anrufe (Störung) Zwischen 08:00Uhr-10:00Uhr : 14
Eingang Anrufe (Störung) Zwischen 10:00Uhr-12:00Uhr : 13
Eingang Anrufe (Störung) Zwischen 12:00Uhr-14:00Uhr : 11
Eingang Anrufe (Störung) Zwischen 14:00Uhr-16:00Uhr : 7
Eingang Anrufe (Störung) Zwischen 16:00Uhr-18:00Uhr : 25
Eingang Anrufe (Störung) Zwischen 18:00Uhr-19:00Uhr : 7


Aber wie bewerkstelligt man es, wenn man zwischen dem anfangs und Enddatum alle Tage mit einlesen will? Also jeder Tag zwischen diesen bestimmten uhrzeiten?

Bei
Code:
start_stamp BETWEEN  TIMESTAMP('$startdatum 08:00:00') and TIMESTAMP('$enddatum 09:00:00%')
würden ja logischerweise die uhrzeiten nicht berücksichtigt werden ...
Habt ihr da irgendwelche Referenzen für mich? Oder könnt mir dies erläutern?
 
mhh ich glaub ich kann mich nich so gut ausdrücken, oder versteh es einfach nicht :p

Also ich versuche ja bei

Code:
SELECT COUNT(DISTINCT start_stamp) AS inbound
                            FROM cdr 
                                WHERE destination_number 
                   LIKE 'Taube' and duration>15 and
                                           TIMESTAMP(start_stamp) BETWEEN  TIMESTAMP('$startdatum 08:00:00') and TIMESTAMP('$startdatum 09:00:00')

die anrufe des Startdatums zwischen 08:00 und 09:00 zu zählen.

Funktioniert ja auch. Nochmals Danke :)

Aber ich wollte jetzt das enddatum mit einbeziehen.

Also das alle Anrufe gezählt werden, welche an allen Tagen zwischen Start und Enddatum zwischen 08:00 und 09:00 eingegangen sind.

Muss ich dafür nen loop verwenden in den das Startdatum einfach immer hochgezählt wird bis ich beim enddatum angekommen bin? Oder gibt es da eine einfachere möglichkeit?
 
Hmm, schreib doch einfach bei
Code:
and TIMESTAMP('$startdatum 09:00:00')
hin
Code:
and TIMESTAMP('$enddatum 09:00:00')

EDIT: Ah! Ok, ich hab das falsch verstanden. Muss ich mal drüber nachdenken...

EDIT2: Wenn ich so recht drüber nachdenke, komm ich zum Schluss, das du über Datum loopen musst. Ich hab keine Idee, wie eine Aggregation über Unter-Mengen zu bewerkstelligen wäre.

Ich würde so vorgehen:

Code:
$tag = strtotime($startdatum);
while($tag <= $enddatum)
{
  // Hier den select (aber mit $tag statt $startdatum) und abholen, darstellen - was auch immer
  $tag+=86400; // Ein Tag hat 86400 Sekunden
}
 
Zuletzt bearbeitet:
Code:
$abfrage = "SELECT COUNT(DISTINCT start_stamp) AS inbound FROM cdr WHERE destination_number 
				LIKE '812' and  duration>35 and TIMESTAMP(start_stamp) BETWEEN  TIMESTAMP('$startdatum') and TIMESTAMP('$enddatum') 
 group BY HOUR(start_stamp) ";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   echo "Eingang Anrufe (Störung)  : $row->inbound  <br>";
   }


?>

hatte natürlich nicht daran gedacht das ich dies auch einfach per group by hour machen kann. Funktioniert so.
Für jeden Stundenblock gibts jetzt eine ausgabe.

Wie schreibe ich dort denn die jeweilige Stunde vor? Muss man sich die stunde per extract holen?
 
Zurück