MySQL Anfrage Frage? - MySQL

Sagen wir, ich zeige die ersten 10 Bilder eines Benutzers anin der MySQL-Datenbank und dann führe ich eine zweite Abfrage aus, um den Rest der anderen Benutzerbilder von dort anzuzeigen, wo die letzte Anfrage aufgehört hat. Wie würde meine zweite Abfrage aussehen?

Hier ist, wie meine erste Abfrage unten aussieht.

SELECT *
FROM images
WHERE images.user_id = "$user_id"
LIMIT 0, 10

Antworten:

1 für die Antwort № 1

Sieh dir das an OFFSET Stichwort (googeln "mysql offset" brachte mich zu genügend Dokumentation). Nicht ganz portabel, aber wenn Sie wissen, dass Sie MySQL / PostGreSQL verwenden, sollte es in Ordnung sein.

Ein weiterer (potenziell besserer) Weg:

SELECT * FROM images WHERE images.user_id = "$user_id" AND someprimarykey NOT IN ( ...first query, only selecting someprimarykey...)

Natürlich, wenn Sie einen automatisch inkrementierenden Primärschlüssel für die Tabelle haben (was oft eine gute Idee ist) AND wird einfach AND primarykey > "$highest_p_key_from_first_call" von denen ich vermute, dass Sie sie nach dem ersten Anruf vorübergehend speichern könnten.


0 für die Antwort № 2

Die einfachste Lösung wäre

SELECT *
FROM images
WHERE images.user_id = "$user_id"
LIMIT 11, 20

(Denken Sie daran, wenn die Datenbank zwischen den Anrufen wechselt, verpassen Sie möglicherweise eine Zeile oder erhalten Sie ein Duplikat auf diese Weise)


0 für die Antwort № 3

Sie möchten die gleiche Abfrage tatsächlich erneut mit ausführen OFFSET 10 aber ohne Angabe eines Limits. Leider ist es nicht möglich, einen Offset ohne eine Grenze zu spezifizieren. Es ist auch nicht möglich, eine Grenze von unendlich zu spezifizieren, z. LIMIT ∞ OFFSET 10 oder LIMIT 10, ∞.

Aber während Sie nicht nach unendlichen Zeilen fragen können, können Sie nah genug kommen. Dies wird in einer anderen Frage diskutiert:

Mysql Offset Unendliche Reihen