Moin!
Nachdem das Problem mit der oberen Schranke sich geklärt hatte (mysql_num_rows() ist dann eben kliener als $limit) bleibt nur noch die Frage nach dem Unterschied zwischen
Select count(ID)from table where...;
Select count(*)from table where...;
Ausprobieren. count() kann bei so simplen Abfragen optimiert werden (IIRC), es macht daher Sinn, eine indizierte Spalte in WHERE abzufragen und diese dann auch als count()-Argument zu verwenden.
Allerdings: Auch für diese Gesamtzahl gilt natürlich, dass sie im Moment der Abfrage schon wieder veraltet ist und nachfolgende neue Datensätze nicht anzeigt.
Ja, das kann man durch einen neuen Blätterversuch dann eben feststellen.
Und genau diese Tatsache unterscheidet beide Varianten kein bißchen voneinander.
Bei Sortierung "Timestamp" sind die neuesten Sätze ja sowieso immer am Ende. Ist nur blöd, wenn dann zwischendurch welche gelöscht werden. Dafür registriere ich bei Nutzung einer von der ID abweichenden Sortierung einen Aufsetzpunkt (where $intro > $checkpoint) und setze $offset auf 0 zurück. Diese Thematik hatten wir schon einmal. $intro besteht aus dem Sortier-Feld und der autoincrement-ID. Auch Timestamp ist bei 30 Bewegungen pro Sekunde ja leider nicht mehr unär.
Du meinst "unique"? :)
Ich sehe deine Lösung nicht. Neue und geänderte Datensätze kriegen einen aktuellen Timestamp und werden in der Sortierung "hinten" angezeigt. Gelöschte Datensätze werden überhaupt nicht mehr angezeigt (die sind ja gelöscht).
Gegen das Nichtanzeigen gelöschter Datensätze hilft, sie nicht wirklich mit DELETE zu löschen, sondern nur als "gelöscht" zu kennzeichnen. Dann haben sie natürlich wieder ein Timestamp, welches aktualisiert wird.
Aber gegen geänderte Datensätze hilft absolut nichts.
Mal angenommen, du listest 10 Datensätze pro Seite und hast insgesamt 14 Datensätze. Du zeigst Seite 1 an. Alles ist wunderbar. Dann werden 4 Datensätze dieser Seite geändert. Dann blätterst du auf Seite 2. Dort kriegst du exakt die 4 geänderten Datensätze gezeigt. Die 4 Sätze, die vorher dort gewesen waren, sind aufgrund deiner Timestamp-Sortierung auf Seite 1 gewandert, wurden also nie angezeigt.
Wie willst du verhindern, dass sowas passiert? Wenn du hierfür eine schlüssige, funktionierende Lösung anbieten kannst, dann bist du wirklich gut. Mir ist für dieses Problem nämlich nur die Ausweichlösung eingefallen, es gar nicht erst zu einem Problem werden zu lassen, sondern eben zu akzeptieren, dass bei einem Client-Server/Client-Server-System, wie es von Browser-PHP-MySQL dargestellt wird, unmöglich ist, Aktualisierungen in der Datenbank sofort zum Anzeigeclient zu senden, damit dieser reagieren und die Anzeige aktualisieren kann.
Denn üblicherweise treten solche Aktualitätsprobleme deshalb auf, weil in der Datenbank viele Änderungen stattfinden. Und weil Datenbanken mit vielen Änderungen typischerweise nicht sinnvoll durchzublättern sind, weil sie meist auch riesengroß sind, entfällt das Problem auf elegante Weise. Oder man akzeptiert und berücksichtigt eben, dass die angezeigte Darstellung nicht aktuell sein muß, und läßt sich im Zweifel eben eine neue Seite generieren.
So langsam bekomme ich da polymorphe Strukturen, sodass meine Funktionen allgemeinverwendbar werden.
Ich glaube nicht.
Bleibt noch mein Problem, ob und wie man der Satzbeschreibung von MySQL eigene Kriterien hinterlegen könnte. Aber das Extra-Feld ist wohl nicht für den DB-Entwickler selber nutzbar. Das wäre nämlich klasse. Wie könnte man denn bei Version 3.23.55-max sonst die Relationen vermerken.
Gar nicht. MySQL 3 kennt keine foreign keys, es ist Aufgabe des Programmierers, die Relationen herzustellen und synchron zu halten. Insofern weiß man deine Relationen nur aufgrund deines irgendwo aufgemalten DB-Schemas - oder man vermutet sie aufgrund geschickt gewählter Feldnamen.
Ich behelfe mir im Moment über den Feldnamen. "ID_ADRESSE" bedeutet dann eben eine Relation zur Tabelle ADRESSE, wobei man ja leider nicht weiß, welcher Art sie ist (1:1, 1:n, n:1) und ob refenzielle Integrität gewahrt bleiben muss.
Tja, falsche Datenbank für diese Anforderung, würde ich sagen.
- Sven Rautenberg
--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)