by TConnect » 05. June 2005 02:07
Hi,
also ich hab jetzt nicht den ganzen Thred gelesen, aber irgendwie ist mir das LIMIT nicht aufgefallen. Ist schon spät, vielleich hab ich das ja auch einfach nur übersehen.
Also ich mache das so (DB-Connect vorausgesetzt):
0. Grundsätzliche Voraussetzungen:
Gehen wir mal davon aus, dass der Benutzer sowohl den Offset als auch das Limit mit übergeben kann, dann überprüfe ich als erstes, ob die beiden Variabeln existieren und wenn ja, ob es Zahlen sind:
[code]if(!is_numeric($_GET["offset"])) {
$_GET["offset"] = 0;
}
if(!is_numeric($_GET["limit"])) {
$_GET["limit"] = 10;
}[/code]
1. Zählen, wie viele Datensätze eigentlich in Frage kommen:
[code]$query = "SELECT COUNT(*) FROM tabelle WHERE col1 like '" . $value1 . "'";
$qresult = @mysql_query($where . $query);
$array_count = @mysql_fetch_array($qresult);[/code]
In $array_count[0] ist das Ergebnis als INT abgelegt. Angenommen, ich habe hier 67 Datensätze gezählt, und ich weiß, wie viele maximalen Seiten es geben kann. Dabei muß ich aber berücksichtigen, ob der Max-Wert glatt durch das Limit teilbar ist, oder nicht, da ich ansonsten nämlich noch eine Restseite mehr berücksichtigen muß:
Die Funktion floor() rundet immer bis zum nächst unteren Integer ab:
[code]$max_pages = floor($array_count[0] / $_GET["limit"]); [/code]
Jetzt ermittelt man über den Modulo (der Rest nach einer Division), ob das $array_count[0] glatt durch das Limit teilbar ist, oder nicht. Das ist der Fall, wenn als Rest 0 bleibt, wie z.B. bei 10/5 oder 40/10.
[code]if($array_count[0] % $_GET["limit"] > 0) {
$max_pages++;
}
$current_page = ($_GET["offset"] / $_GET["limit"]) + 1;[/code]
3. Layout für die Seitenzahlen entwerfen (spätere Links auf der Internetseite):
[code]for($i=0; $i < $max_pages; $i++) {
$link = "<a href=\"datei.php?offset=" . ($i * $_GET["offset"]);
$link .= "&limit=" . $_GET["limit"] . "\">";
if($i == $current_page) {
$link .= "<b>" . ($i +1) . "</b>";
} else {
$link .= ($i + 1);
}
$link .= "</a>";
// Hier ggf. $link formatiert ausgeben lassen...
}[/code]
Wie Du das später layouterisch regelst, schaust Du am besten selber.
4. Eigentliche Query ausführen:
[code]$query = "SELECT * FROM tabelle WHERE col1 like '" . $value1 . "'";
$query .= " LIMIT " . $_GET["offset"] . ", " . $_GET["limit"];
$qresult = @mysql_query($query);
$countresult = @mysql_num_rows($qresult);
if($countresult >= 1) {
for($y=0; $y < $countresult; $y++) {
@mysql_data_seek($qresult, $y);
$values = @mysql_fetch_array($qresult, MYSQL_ASSOC);
}
} else {
$errorcode = "Keine Datensätze...?!?";
}[/code]
Die Query beinhaltet eigentlich nur noch die Darstelltung. Die Links zu den Seiten hast Du ja weiter oben schon erstellt.
Liebe Grüße
TConnect