phpbar.de logo

Mailinglisten-Archive

[php] PHP & MySQL: Zeitbereich im Zeitbereich

[php] PHP & MySQL: Zeitbereich im Zeitbereich

Robert Pleniger pleniger at rpdev.at
Don Jun 9 21:16:56 CEST 2005


Am Thu, 9 Jun 2005 20:09:08 +0200 schrieb Aron Schlesinger <aron at viplocations.de>:

>
> Hallo Michael,
>
>> Hallo zusammen,
>>
>> ich bin seit circa 4 Monaten passives Mitglied dieser
>> Mailinggruppe. Bisher habe ich mir immer nur angesehen, mit welchen
>> Problemen sich die Kollegen rumschlagen, :-)
>>
>> Heute muss ich mal aktiv ins Geschehen eingreifen, da ich ein
>> Problem habe, dass ich bisher nicht performant genung gelöst bekomme.
>>
>>
>> Und zwar möchte ich einen Zeitbereich im Zeitbereich abfragen.
>> Beispiel: Vom 01.06.2005 bis zum 09.06.2005 alle Ereignisse, die
>> pro Tag zwischen 12:00 und 16:00 aufgetreten sind. Fällt euch da
>> eine gute Lösung ein?
>>
>> "SELECT * FROM whatever WHERE timestamp > '01.06.2005' AND
>> timestamp < '09.06.2005'" ist logisch, aber wie bekomme ich jetzt
>> für die 8 Tage die dazwischen liegen in einem SQL Statement jeweils
>> die Werte raus!? Das Ergebnis dieses Queries soll einfach nur die
>> Anzahl Einträge im Bereich zwischen 12:00 und 16:00 pro Tag
>> darstellen. Ich müsste also insgesamt 8 Zahlen als Output bekommen.
>> Ist das möglich? Oder muss ich da mit ner händischen PHP Schleife
>> rumtricksen, wie ich es im Moment mache!?
>>
>
> Wenn ich Dich richtig verstanden habe dann würde ich das vielleicht
> über die HOUER() und GROUP() Funktion von MySQL probieren.
>
> ( http://dev.mysql.com/doc/mysql/de/date-and-time-functions.html
> http://dev.mysql.com/doc/mysql/de/group-by-functions.html )
>
> SELECT COUNT(*) anzahl, DATE(timestamp) datum
> FROM whatever
> WHERE timestamp > '01.06.2005'
>    AND timestamp < '09.06.2005'
>    AND HOUR(timestamp) > 12
>    AND HOUR(timestamp) < 16
> GROUP BY DATE(timestamp)
> ORDER BY timestamp
>
> So würde ich das Probieren ist aber nicht getestet :)
> Ob das dann die Performateste MySQL Lösung ist kann ich Dir
> aber nicht sagen aber bestimmt andere..
>
> Gruß
>    Aron
>
> --
> ** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de **
> Informationen: http://www.phpbar.de
> http://lists.phpbar.de/mailman/listinfo/php
>

Hallo Leute

Das Datum im Format '09.06.2005' wird dich nicht Glücklich machen.

Sorge dafür das die Datums im Format 'YYYY-MM-DD' übergeben und die Zeiten im Format 'hh:mm' übergeben werden.
Das Feld timestamp muss als timestamp(14) erstellt werdn (ist Standard bei keiner Grössenangabe).
dann lautet die Klausel:
   WHERE (LEFT(timestamp, 10) BETWEEN '2005-06-01' AND '2005-06-09')
     AND (SUBSTRING(timestamp, 12, 5) BETWEEN '12:00' AND '16:00')
Das Datum in der ersten Zeile, muss deshalb extrahiert werden sonst vergleicht MySQL timestamp inkl. Zeit mit '2005-06-01 00:00:00'.
Alternativ, und ich glaube schneller, würde es werden wenn Du das Bis-Datum um einen Tag erhöhst und dann:
   WHERE timestamp >= '2005-06-01' AND timestamp < '2005-06-10')
     AND (SUBSTRING(timestamp, 12, 5) BETWEEN '12:00' AND '16:00')

Jedoch ist alles nur Theorie, nicht getestet.

Schönen Abend

-- 
Robert Pleniger


php::bar PHP Wiki   -   Listenarchive