phpbar.de logo

Mailinglisten-Archive

[php] OT: MySQL for / while Schleife

[php] OT: MySQL for / while Schleife

Sebastian Mendel lists at sebastianmendel.de
Fre Jul 27 12:05:36 CEST 2007


Michael Borchers schrieb:
> 
>> 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)
>>>     }
>>> }
>>
>> was spricht gegen:
>>
>> SELECT
>>    DAYOFMONTH(`date`),
>>    `status`,
>>    COUNT(`foo`) AS `count`
>> FROM
>>    `bar`
>> WHERE
>>    YEARMONTH(`date`) = [yyyymm]
>> AND
>>    `status` IN ([die gewünschten Zustände, oder alle?])
>> GROUP BY
>>    DAYOFMONTH(`date`),
>>    `status`
>>
>>
>> eventuell noch mit ROLLUP wenn benötigt
> 
> Hi Sebastian!
> Mit Deiner Query bekomme ich ja schon einmal jeden einzelnen Tag als
> einzelne Reihe - perfekt!

Tag und Status

tag - status - count

01      1       32
01      3       16
02      1       18
03      2       10
...

sprich:
32 mal Status 1 am Tag 1
16 mal Status 3 am Tag 1
...

wolltest du das nicht?


> Jetzt müsste ich allerdings den COUNT auf jeden einzelnen Status
> anwenden können.

? nicht pro Tag?


> Bis jetzt erhalte ich ja nur alle IDs insgesamt in dem Feld 'count'.

ne, die Anzahl der ID's pro Tag und Status


> Sprich, ich muss wissen, wieviele der Einträge zu jedem Datum (also jede
> Reihe) yyyy-mm-dd
> den Status 1, 2, 3, 4 und 5 haben =>

yepp, genau das macht es

Wenn du immer alle Zustände (status) haben willst dann brauchst du die Zeile
"AND `status` ..." natürlich nicht

aber das GROUP BY muss bleiben wie es ist mit Datum und Status


> COUNT ... WHERE status = 1 und COUNT ... WHERE status = 2 usw.
> 
> Und das kriege ich nicht in einer Query gelöst:(

du vielleicht nicht ... ich schon ... ;-)


-- 
Sebastian


php::bar PHP Wiki   -   Listenarchive