2017-07-03 6 views
0
SELECT * 
FROM users 
ORDER BY highscore DESC 
LIMIT 5 OFFSET 5 

undMysql LIMIT Rückkehr unerwartete Zeilen

SELECT * 
FROM users 
ORDER BY highscore DESC 
LIMIT 5 OFFSET 10 

das gleiche Ergebnis zurück. Und sie sind anders als die Datensätze, wenn ich die LIMIT-Klausel weglasse! Ich habe die Community durchsucht. Es gibt ähnliche Fragen, die aber nicht helfen.

EDIT: Hier ist die Tabelle sind Daten-

Here is the table data ordered by <code>highscore</code>

+0

Gibt es Einschränkungen, die verhindern, dass Benutzer denselben Highscore haben? –

+0

Keine Einschränkungen. Ich sollte auch erwähnen, dass viele von ihnen die gleiche Punktzahl haben. –

+2

zeigen Sie uns Tabelle Daten –

Antwort

1

Vermutlich ist das Problem, dass Sie Bindungen für highscore haben. Wenn Sie Beziehungen haben, ordnet MySQL die Zeilen mit dem gleichen Wert auf eine beliebige und unbestimmte Weise an. Selbst zwei Läufe der gleichen Abfrage können zu unterschiedlichen Sortierungen führen.

Warum? Der Grund ist einfach. Es gibt keine "natürliche" Reihenfolge für das Sortieren von Schlüsseln mit demselben Wert. SQL-Tabellen repräsentieren ungeordnete Sets.

Um die Sortier stabil zu machen, umfassen eine eindeutige ID als letzte Schlüssel in der ORDER BY:

SELECT u.* 
FROM users u 
ORDER BY u.highscore DESC, u.userId 
LIMIT 5 OFFSET 5; 

Dann, wenn Sie die nächsten 5 Reihen holen, werden sie unterschiedlich sein.