Mailinglisten-Archive |
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