Hallo Christian,
warum machst Du uns, Deinem Server und Dir selbst das Leben so schwer?
> $query = "SELECT date FROM training ORDER BY date LIMIT 1";
[...] Es folgt eine Menge unkommentierten PHP-Codes ...
... mit dem Einsatz einer undokumentierten Funktion:
> $week = week($firstweek, $firstyear);
...
> while ($weekstart <= $now) {
... und dem Absetzen von Abfragen an die Datenbank in einer Schleife, ...
> $query = "SELECT * FROM training WHERE date >= '".$weekstart."' AND date <= '".$weekend."' ORDER BY date";
... bei der viele, viele Daten abgefragt werden, "SELECT * " ist ja so bequem ...
> $result = mysql_query($query);
... mögliche Fehler munter ignoriert werden,
> while($row = mysql_fetch_object($result))
> {$date = $row->date;
... offensichtlich ein einziges Feld interessiert ...
> $numberofresults = mysql_num_rows($result);
... und die Anzahl der Datensätze, während der Rest weggeworfen wird ...
> }
und da Du irgendwo noch einen Fehler eingebaut hast, darfst Du Dich nicht wundern, dass Dein Skript viel zu lange braucht und zwangsweise beendet wird.
Ich vermute, Du möchtest in Erfahrung bringen, wieviele Einträge je Kalenderwoche und Jahr es in der Tabelle in einem bestimmten Zeitraum gibt. Wenn ja, so kannst Du dies mit einer relativ einfachen SQL-Abfrage bekommen, ohne irgendwelche überflüssigen PHP-Verrenkungen zu machen:
Da Du Deine Zeitangaben als UNIX-Timestamp abgespeichert hast, für den meiner
Meinung nach nichts spricht, als dass er in diversen Programmiersprachen
bequem zu bekommen ist, ist noch etwas zusätzlicher Aufwand erforderlich.
Grundsätzlich bin ich der Ansicht, dass man Datums- und Zeitangaben in
Datenbanken in Feldern entsprechenden Typs abspeichern sollte.
Zurück zu Deinem Problem:
Ein einziges Mal ausgeführt, sollte Dir
[code lang=sql]SELECT
-- ermittle die Kalenderwoche
[link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_week@title=WEEK]([link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_from-unixtime@title=FROM_UNIXTIME](date)) AS Woche,
-- ermittle den Jahresanteil
[link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_year@title=YEAR](FROM_UNIXTIME(date)) AS Jahr,
-- zähle wieviele Einträge es davon gibt
[link:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count@title=COUNT](date) AS Anzahl
FROM training
-- in einem bestimmten, von Dir vorgegebenen Zeitraum (hier als UNIX-Timestamps
WHERE date [link:http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_between@title=BETWEEN] dein_start AND dein_ende
-- gruppiert nach Kalenderwoche und Jahr, d.h. für jede Kombination von
-- Kalenderwoche und Jahr genau eine Zeile
GROUP BY Woche, Jahr
Dein Ergebnis liefern. Möchtest Du das Ergebnis über die kompletten Daten Deiner Tabelle sehen, so lass die WHERE-Klausel einfach weg.
Freundliche Grüße
Vinzenz