Antwort #92 am: 22. November 2009, 12:12:57
Hi,
hier der letzte Vorschlag für die Änderung der start.php etwas ausführlicher, da der Fehler im Zusammenhang mit leeren bzw 0000-00-00 00:00:00-Geburtsdaten im Original ja noch nicht behoben ist. Die Idee ist, die Logik in die Abfrage zu verlagern. Dadurch
1. leere Geburtsdaten werden bereits in der Abfrage behandelt und aussortiert
2. kann man sich die Funktion array_qsort sparen
3. wird die Geburtstagsberechnung performanter, weil wesentlich weniger Daten transportiert werden als im Original (komplette Kundentabelle mit allen Feldern, obwohl nur 3 Felder benötigt werden und die nur von einem Bruchteil der Kunden)
4. wird der Algorithmus leichter nachvollziehbar
start.php, ca zeile 470:
$ergebnis = xtc_db_query("select
concat(customers_firstname, ' ', customers_lastname) name,
customers_dob dob,
if(day(customers_dob) = day(current_date), true, false) today
from " . TABLE_CUSTOMERS . "
where month(customers_dob) = month(current_date)
order by customers_dob");
$this_month = array();
while($row = mysql_fetch_array($ergebnis))
{
if ($row['today'] == 1) {
echo '<tr><td width="78%" bgcolor="#FFF9E9">' . $row['name'] . '</td>';
echo '<td width="22%" bgcolor="#FFF9E9">' . xtc_date_long($row['dob']) . '</td></tr>';
}
else
$this_month[] = array('name' => $row['name'], 'dob' => $row['dob']);
}
?>
<tr>
<td width="100%" colspan="2" style="border-top: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC" bgcolor="#F1F1F1"><strong>Kunden, die noch in diesem Monat Geburtstag haben:</strong></td>
</tr>
<?php
foreach($this_month as $row) {
echo '<tr><td width="78%" bgcolor="#FFF9E9">' . $row['name'] . '</td>';
echo '<td width="22%" bgcolor="#FFF9E9">' . xtc_date_long($row['dob']) . '</td></tr>';
}
Grüße, Volker