Mailinglisten-Archive |
> Michael Borchers schrieb:
>> Aha! Ich hab es nun etwas "unschön" probiert, in dem ich die Query mit
>> php
>> zusammensetze. Das ergibt eine
>> gigantische Query bestehend aus diversen COUNT()s. Die Abfrage dauert
>> über
>> phpMyAdmin um die 5 Sekunden.
>>
>> Die Query setzte sich ungefährt wiefolgt zusammen:
>> for(alle Tage t des jeweiligen Monats) {
>> for(Status s, 5 an der Zahl) {
>> SELECT
>> COUNT(foo) FROM bar WHERE DAYOFMONTH(date) = t
>> AND status = s
>> AS (individueller Name wie count_s_t)
>> }
>> }
Hier wie versprochen ein paar Datensätze:
history_id history_status_id history_date
history_description contacts_id
14760 1 2007-08-01 08:00:00 Status 1,
1.8. 1
14761 1 2007-08-01 08:00:00 Status 1,
1.8. 2
14762 2 2007-08-01 08:00:00 Status 2,
1.8. 1
14763 3 2007-08-01 08:00:00 Status 3,
1.8. 1
14764 3 2007-08-03 08:00:00 Status 3,
3.8. 2
14765 3 2007-08-03 08:00:00 Status 3,
3.8. 1
14766 5 2007-08-03 08:00:00 Status 5,
3.8. 1
Die Schleife soll nun für alle 31 August-Tage wiefolgt durchlaufen: (optisch
für php dargestellt,
wie gesagt ist die SQL Klausel Lösung gesucht;) )
for($d=1;$d<32;$d++) {
for($s=1;$s<6;$s++) {
SELECT
COUNT(history_id)
FROM history
WHERE 1
AND DAYOFMONTH(history_date) = $d
AND MONTH(history_date) = 8
AND YEAR(history_date) = 2007
AND history_status_id = $s
}
}
Dabei soll für jeden Tag eine Row ausgegeben werden. In jeder Row stehen
dann die COUNT()s für alle Status.
Optisch:
Datum COUNT status 1 COUNT status 2 COUNT status 3 COUNT
status 4 COUNT status 5
01.08.2007 2 1 1
0 0
02.08.2007 0 0
0 0 0
03.08.2007 0 0
2 0 1
Das habe ich so trotz Tipps noch nicht hingekriegt;(
php::bar PHP Wiki - Listenarchive