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