Mailinglisten-Archive |
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 ... ;-) Abfragen tust du mit einem Query in SQL bekommen tust du die Daten mit dem bereits genannten Query Formatieren tust du das mit deiner Middleware, in diesem Fall PHP einfach die Fehlenden Tage/Status durch 0 ersetzen bei der Ausgabe wenn du es wirklich unbedingt in der Datennank lösen willst, brauchst du entweder PROCEDUREs oder total verschachtelte JOINS und IF Was aber, wie geschrieben, eigentlich nicht Sache der DB ist ... und außerdem bezweifle ich das du mit deinem "gigantischen Query" obiges Ergebnis erhalten hast ... -- Sebastian
php::bar PHP Wiki - Listenarchive