![]() 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