phpbar.de logo

Mailinglisten-Archive

[php] OT: MySQL for / while Schleife

[php] OT: MySQL for / while Schleife

Michael Borchers list at tridemail.de
Mon Jul 30 09:28:37 CEST 2007


> 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