2017-07-23 2 views
0

Ich möchte die neuesten Einträge in einer Tabelle abrufen, die mehr als 1.000.000 Einträge enthält. Ich verwende diese Abfrage für eine InstanzAbrufen von Einträgen in der letzten Tabelle mit LIMIT a, b oder limit offset

SELECT id FROM tablea WHERE flag = "N" ORDER BY id LIMIT 510045,200; 

und es gibt mir Einträge aus 510.045 beginnend und endend bei 510245. Kann MYSQL etwas, wo ich bekommen kann beginnen Einträge von 510245 bis 510045. ich die Daten aus dem Mittelwert holen zuletzt und ich möchte nicht nur 200 Einträge holen.

+0

Ihre Abfrage gibt Ihnen keine Ergebnisse von ID x. Sie erhalten das Ergebnis der Zeile Y, die zwei verschiedene Dinge sind. Aber wenn was Sie wollen, ist Datensätze von ID x verwenden Sie die Where-Klausel –

+0

Wenn Sie die "neuesten" Einträge möchten, warum würden Sie nicht in absteigender Reihenfolge verwenden? –

+0

@ClaudioPinto sorry von X meinst du 510045 und von Y du meinst 510245. Wenn ja, dann gibt diese Abfrage Daten beginnend von 510045 bis 510245 zurück (ja es ist nicht ID, ich sollte das entfernen). Aber ich verstehe Ihre Lösung in der zweiten Zeile nicht ganz. Können Sie erklären ? –

Antwort

1

Sie sollten ORDER BY desc und, wenn Sie möchten, LIMIT für definieren, wie viele Einträge Sie möchten.

Beispiel:

SELECT id FROM tablea WHERE flag = "N" ORDER BY id DESC; 
-- this will help to find the last entries 

Aber wenn Sie die neuesten Einträge haben wollen, dass Sie nicht in den letzten Abfrage erhalten haben, sollten Sie immer den Wert der letzten ID halten und sie als Referenz verwenden zur nächsten Überprüfung.

Beispiel (Nimmt man die letzte ID der letzten Abfrage Ausführung 55304 wurde):

SELECT id FROM tablea WHERE flag = "N" WHERE id > 55304 ORDER BY id DESC; 
+0

So verwende ich eine Art von Multitasking-Prozess, in dem ich diese Abfrage ausführen muss auf verschiedenen Systemen gleichzeitig. Aufgrund einiger anderer Einschränkungen kann ich diese Abfrage nicht verwenden. Das wäre der einfachste Weg gewesen, aber ich kann das nicht benutzen. –

+0

OP klar gesagt, e will nicht nur die letzten 200 –

+0

@ClaudioPinto ist nur ein Beispiel. Ich habe versucht, alle Situationen herauszufinden. Es ist eine nicht faire -1 –

0

Wenn das, was Sie wollen Zeilen ist, wo die ID größer als 510.245 benutzen Sie einfach die in dem Zustand

Select * FROM table WHERE flag = 'n' AND id > 510245 

Das sollte es tun

+0

Nein, es ist überhaupt nicht mit IDs verwandt, deshalb habe ich die Frage bearbeitet und ID von dort entfernt. Das Problem ist, aktuelle Abfrage gibt Daten von 510045 bis 510245 zurück und ich will es von 510245 bis 510045. (Dies ist keine ID, können Sie sagen, dies ist eine Sequenz des Abfrageergebnisses) –

+0

Können Sie es klar machen, was diese Nummer ist ? In MySQL Limit erlaubt es Ihnen nicht, von einer Position zu starten und von dort alles zu bekommen. Ihre Lösung könnte ein Fehlerlimit wie LIMIT 510245, 1000000 –

+0

sein. Um 510245 zu 510045 zu bekommen, benutzen Sie LIMIT 510045,200 –

0

Wie ich Ihre Anforderung verstehe. Sie können es versuchen.

Select * FROM table WHERE flag = 'N' AND id > 510245 ORDER BY id 
+0

@strawberry in den Hauptkommentaren gab die Lösung, Unterabfrage zu verwenden, und es hat funktioniert. :) Danke für Ihre Hilfe :) –

0

Eine weitere Sache hier ist

Die Version i auf arbeitete wurde subquery enthalten LIMIT nicht unterstützt. Also, @strawberry Danke, dass du mir den Hinweis gegeben hast, die Frage zu lösen. Aber ich verwendet, um dieses Sub-Abfrage als innere Join-Tabelle (unten erklärt)

SELECT id FROM tablea AS T1

INNER JOIN (SELECT id FROM tablea WHERE flag = "N" ORDER BY id LIMIT 510045,200) AS T2

WHERE T2._id = T1._id ORDER BY T2._id DESC;

Dies gab mir die gewünschten Ergebnisse. Danke allen für Ihre Hilfe !!