2017-06-11 6 views
0

Ich habe eine Abfrage, die 10 Elemente einer großen Liste zurückgibt. Zum Beispiel:Mysql Grenze, wenn die ganze Liste ändern kann

SELECT * FROM users 
WHERE user_is_block = 0 
AND user_is_paid = 1 
ORDER BY user_post_hour ASC, id ASC" 

Als ich limit ?, ? einen Teil dieser Liste jedes Mal zu erhalten setzte, geschieht ein Problem. Stellen Sie sich vor, wir bekommen die ersten 10. Die Zeile mit der ID 11 ist die erste in der nächsten Anfrage. Aber wie wir ORDER BY user_post_hour verwenden, kann die ID 11 steigen und 10 werden. Wenn also eine zweite Anfrage gesendet wird, sehen wir niemals ID 11.

Irgendeine Idee?

+0

Betrachten Sie die gesamte Datenmenge auf Ihre Anwendungsebene, wie JSON oder (wenn Sie ein bisschen altmodisch sind) Xml, sagen. Dann paginieren Sie einfach diese Ergebnismenge. – Strawberry

+0

Was ist der Datentyp für "user_post_hour"? – Santosh

+0

@Strawberry Das ist natürlich JSON. Aber das Problem ist, dass die Liste (Tabelle) groß ist und für jede Zeile sollte ich eine andere Abfrage ausführen, und es kann eine Menge Zeit brauchen. –

Antwort

0

Es könnte das Problem mit Datentyp soring sein, warf wieder Ihren Spalt Wert auf eine ganze Zahl

SELECT * FROM users 
WHERE user_is_block = 0 
AND user_is_paid = 1 
ORDER BY cast(user_post_hour as unsigned) ASC, id ASC 

Verwendung ausdrücklich diesen Trick.

+0

Ich habe nicht verstanden, was es mit 'LIMIT' macht! Schau, das Problem ist, dass sich die Liste bei jeder Anfrage ändern kann. Die Zahl 11 in meinen Zeilen kann in der zweiten Abfrage zu 10 werden, sodass sie nie wieder zum Client zurückkommt. –

Verwandte Themen