2015-05-15 5 views
6

Limit 0, 1000 gibt die ersten 1.000 Ergebnisse zurück, aber LIMIT 0 gibt 0 Ergebnisse zurück.Warum ist "LIMIT 0" in MySQL SELECT-Anweisungen sogar erlaubt?

Das ist nicht sehr intuitiv imho. Zum Beispiel dachte dumme alte mich, dass das Entfernen der 1000 die obere Grenze der SELECT-Abfrage entfernen würde und so alle Ergebnisse zurückgeben würde.

Warum sollte jemand überhaupt MySQL für 0 Ergebnisse abfragen wollen?

+0

Sie müssen kein Limit für eine Abfrage angeben, wenn Sie möchten, dass alle Zeilen die LIMIT-Klausel vollständig auslassen. (Bestimmte Umgebungen, wie MySQL Workbench, haben jedoch konfigurierbare Grenzen, um das versehentliche Auswählen aller Zeilen aus einer Multi-Millionen-Ringtabelle zu verhindern.) – Uueerdo

+0

'Wählen Sie Anzahl (*) von Mistable Limit 0' ist ein solcher Ort, an dem ich hab es benutzt gesehen. Natürlich hat das Entfernen von "Limit 0" hier keinerlei Auswirkungen, ich denke, es versucht nur, dass keine Zeilen zurückgegeben werden. – asgs

Antwort

21

Vom MySQL documentation

LIMIT 0 schnell eine leere Menge zurück. Dies kann nützlich sein, um die Gültigkeit einer Abfrage zu überprüfen. Wenn Sie eine der MySQL-APIs verwenden, können Sie auch die Typen der Ergebnisspalten abrufen.

0

* Polite Korrekturen sind willkommen und geschätzt, wenn ich hier falsch bin, aber:

Mein Verständnis ist, dass LIMIT 0, 1000 SQL ist zu sagen, dass Sie mit dem ersten Satz von 1000 Ergebnissen in einem starten wollen gegebene Datenbank für die gegebenen Kriterien. Wenn beispielsweise 10.000 Datensätze in einem Datensatz vorhanden sind, zeigt LIMIT 0, 1000 den ersten Satz von 1000 Ergebnissen an. Die Null ist wie der Index eines Arrays in JavaScript - der Code startet die ITS-Zählung mit Null, anstatt eins, wenn ein Array-Element referenziert wird. So ist Punkt # 1 eigentlich Punkt # 0, Punkt # 2 ist eigentlich Punkt # 1 und so weiter.

+2

Das stimmt, aber es wird nur als Offset behandelt, wenn zwei Parameter vorhanden sind. Wenn nur ein Parameter vorhanden ist, wird der Parameter als Anzahl von Zeilen behandelt. @Brandon hatte jedoch eine echte Antwort auf diese Frage. – Devon

+1

Oh ich sehe, ich wusste das nicht - danke @Devon! –

+0

Ihr Verständnis ist richtig. Aber das beantwortet nicht wirklich die Frage, die gestellt wurde: "Warum sollte irgendjemand überhaupt MySQL für 0 Ergebnisse abfragen wollen?" **. – spencer7593

0

Zusätzlich zu den bereits gegebenen Antworten ist es auch nützlich, wenn Sie Operationen auf einer Tabelle basierend auf der Anzahl der in dieser Tabelle vorhandenen Zeilen ausführen möchten.

I.e. Verwendung von PHP, wenn Sie alle Einträge mit Ausnahme der mit der größten ID aus der Tabelle „myTable“ löschen wollen:

<?php 
$con = mysqli_connect("hostname", "username", "password", "database"); // Connect 
$totalRows = mysqli_query($con, "SELECT COUNT(*) FROM myTable"); // Get total row count 
$mysqli_query($con, "DELETE FROM myTable WHERE id >= 0 LIMIT ($totalRows - 1);"); // Delete 
?> 

Es ist wirklich nützlich, denn wenn man schon nur 1 Zeile übrig haben, werden Sie mit gelassen werden LIMIT 0, was Sie wollen.