Überschrift pro Seite und pro Einheit (Jahr) in php ausgeben.
Läufer
- php
Hallo an alle Profis.
Ich habe eine Tabelle erstellt mit den Feldern DATUM, TEXT, ZAHL. Die Ausgabe soll derart erfolgen, dass zunächst pro Jahr die Anzahl der Datensätze und die Gesamtzahl gezeigt wird, danach die dazugehörenden einzelnen Datensätze. In einer Endlostabelle konnte ich das Problem lösen. Wenn ich aber pro Seite nur eine bestimmte Anzahl von Datensätzen anzeigen möchte (Limit $start, MAX_EINTRAEGE) passt mein "logisches" Konzept nicht. Kann mir wer weiterhelfen? Im folgenden der Code:
echo"<table><tr>
<td>Datum</td>
<td>TEXT</td>
<td>ZAHL></td>
</tr>";
//Eintraege pro Seite:
define("MAX_EINTRAEGE",5);
// Die Berechnung erfolgt nur für ungerade Zahlen!!!
define("NAV_LEISTE",5);
// Die aktuell angeforderte Seite
$seiteAktuell = $_GET['site'] + 0;
// Falls noch keine Seitenzahl eingegeben wurde, den Wert auf die erste Seite setzen
if(empty($seiteAktuell))
$seiteAktuell = 1;
// Berechnet die naechsten Eintraege aus MAX_EINTRAEGE
$start = $seiteAktuell * MAX_EINTRAEGE - MAX_EINTRAEGE;
// Tabelle "Beispiel" mit den Feldern "Datum, Text, Zahl"
$hpt = "SELECT DISTINCT(year(datum)) FROM Beispiel ORDER BY datum ASC";
if ($res=send_sql($db,$hpt)) {
$AnzH = mysql_num_rows ($res);
}
for ($a=0; $a<$AnzH; $a++) {
$succ=mysql_data_seek ($res, $a);
$arrh=mysql_fetch_array($res, MYSQL_NUM);
list($Jahr) =$arrh;
}
// Holt die aktuellen Datensaetze aus - define("MAX_EINTRAEGE",15)
$det = "SELECT * FROM Beispiel ORDER BY datum DESC LIMIT $start, ".MAX_EINTRAEGE;
if ($resD=send_sql($db,$det)){
$AnzD = mysql_num_rows ($resD);
}
//Gesamtzahl der Datensätze
$resultGesamt = @mysql_query("SELECT COUNT(*) AS menge FROM Beispiel");
$Eintraege = @mysql_result($resultGesamt,0,"menge");
for ($j=0; $j<$AnzD; $j++) {
$sucd=mysql_data_seek ($resD, $j);
$arrd=mysql_fetch_array($resD, MYSQL_NUM);
list($eID, $datum, $text, $zahl) =$arrd;
$d= explode("-", $datum);
$datum = $d[2].".".$d[1].".".$d[0];
$nJahr = $d[0];
if ($Jahr == $nJahr) {
$sql = "SELECT * FROM Beispiel WHERE year(datum) = $Jahr";
$res = send_sql($db,$sql);
$AnzJahr = mysql_num_rows ($res);
for ($z=0; $z<$AnzJahr; $z++) {
$suc=mysql_data_seek ($res, $z);
$arr=mysql_fetch_array($res, MYSQL_NUM);
list($eID1, $datum1, $text1, $zahl1)=$arr;
$zahlAll = $zahlAll + $zahl1;
}
echo"<tr>
<td><b>",$Jahr,"</b></td>
<td>Anzahl: ",$AnzJahr," - Gesamtzahl: ",$zahlAll,"</td>
</tr>";
$Jahr = $Jahr - 1;
$zahlAll = 0;
}
echo"<tr>
<td>",$datum,"</td>
<td>",$bewerb,"</td>
<td>",$bewerb,"</td>
</tr>";
}
echo"</table>";
Vielen Dank.
LG
Läufer
In einer Endlostabelle konnte ich das Problem lösen.
Was für eins?
Dir kann hier bestimmt jemand Tips geben, aber dazu sollte man erst mal wissen was das Problem ist.
In einer Endlostabelle konnte ich das Problem lösen. Wenn ich aber pro Seite nur eine bestimmte Anzahl von Datensätzen anzeigen möchte (Limit $start, MAX_EINTRAEGE) passt mein "logisches" Konzept nicht.
Naja, du beschneidest die Einträge bei der Abfrage
$det = "SELECT * FROM Beispiel ORDER BY datum DESC LIMIT $start, ".MAX_EINTRAEGE;
und dann nimmst du eine Untermenge
if ($Jahr == $nJahr) {
Logischerweise sollte das andersherum sein: die Beschneidung durch seiteAktuell und MAX_EINTRAEGE _nach_ der Zusammenstellung der Datensätze kommen.
Dies kannst Du erreichen, wenn Du zum Beispiel nach der Abfrage mit $Jahr==$nJahr die Ergebnisse erst in einen Vektor schreibst und denn dann beschneidest. Anschliessend wird dieser Inhalt in Deine Tabelle geschrieben. Überhaupt rate ich Dir davon ab, in Deinen Code die echo's einzubauen. Lieber trenne Datenbeschaffung und Datenausgabe (vielleicht sogar über ein Template) über den beschriebenen Zwischenschritt. Das erleichtert die Wartung ungemein, besonders bei Tabellen.
PS: Bitte rücke den Code innerhalb Schleifen (etc.) ein, wenn Du ihn postest.
PPS:
$d= explode("-", $datum);
$datum = $d[2].".".$d[1].".".$d[0];
$nJahr = $d[0];
dafür gibt es php-Funktionen wie [date()](http://de.php.net/manual/de/function.date.php).
LG,
LSpreee