Mailinglisten-Archive |
Michael Borchers schrieb:
>
>
>> 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)
>>>>> }
>>>>> }
>>> 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;(
>> SQL ist eine Abfragesprache - keine Ausgabeformatiersprache ... ;-)
>
> Das war auch nur zur Verdeutlichung, wie die Row aus dem Result später
> zusammengesetzt sein soll;)
yepp, und genau das meine ich - SQL holt die Daten, PHP bringt sie in Form
zumal das auch relativ einfach ist
$data = array(
'03.08.2007' => array(
'status 1' => 2,
'status 2' => 1,
...,
),
'04.08.2007' => ...,
);
welches du dann ganz einfach auslesen kannst während du über alle Tage und
Status iterierst
>> und außerdem bezweifle ich das du mit deinem "gigantischen Query" obiges
>> Ergebnis erhalten hast ...
>
> In der Tat habe ich nur alle einzelnen COUNT()s bekommen, keine einzelnen
> Rows mit Datum:(
> Den Rest habe ich dann mit php aufgelöst.
eben, so sollte es auch sein denn Theoretisch kannst du dein gesamte
Anwendung in das DBMS verschieben - aber das ist eigentlich nicht die
Aufgabe des DBMS
Aber das ist auch so ne Glaubenssache - ab wann gehört das ins DBMS oder in
die Anwendung ... ich würde das nicht im DBMS machen ...
--
Sebastian
php::bar PHP Wiki - Listenarchive