Mailinglisten-Archive |
>>>> Ich habe verschiedene Status 1-X. Zu jedem Status werden verschiedene >>>> COUNT()s durchgeführt, z.B. >>>> SELECT COUNT(foo) FROM bar WHERE status = X >>>> Besteht die Möglichkeit in MySQL 5 eine Schleife zu konstruieren, à la >>>> FOR(i=0;i<X;i++) { >>> < SELECT COUNT(foo) FROM bar WHERE status = i >>> >>> eventuell damit >>> >>> CREATE PROCEDURE p () >>> BEGIN >>> DECLARE i INT DEFAULT 0; >>> WHILE i < 5 DO >>> SELECT * FROM v; >>> SET i = i + 1; >>> ALTER VIEW v AS SELECT 2; >>> END WHILE; >>> END; >>> >>> Gruß >>> Wolfgang Skupin >> >> Ich glaube diese Zusammenstellung würde meinen Zweck erfüllen. Leider >> läuft >> bei uns imme noch MySQL 5.0.:( >> Ich werde es aber mal auf 5.1 testen. Worin liegt der Vorteil der >> PROCEDURE, >> denn ich denke die normale >> WHILE Schleife würde mir schon reichen?! > > die WHILE-Schleife gibt es nunmal nur in einer PROCEDURE ... ;-) > > aber ich denk wie die anderen schon vorgeschalgen haben, das du das mit > GROUP BY und eventuell 'derived tables' (subselects) lösen kannst > > > -- > Sebastian 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) } } usw., natürlich wird auch noch auf Monat und Jahr geprüft. D.h. also Pro Tag werden jeweils 5 COUNT()s für die Status ausgeführt. Bei 31 Tagen sind das also 31*5=155 COUNT()s in einer Query. Nicht gerade schön, aber bis jetzt die einzige Lösung alles in einem Result zu erhalten. Würde die PROCEDURE das ganze wesentlich schöner und performanter lösen? Sorry, ich weiss, ganz schöne unschöne Query;)
php::bar PHP Wiki - Listenarchive