2015-05-15 12 views
6

Limit 0, 1000 zwraca pierwsze 1000 wyników, ale LIMIT 0 zwraca 0 wyników.Dlaczego dozwolona jest "LIMIT 0" w instrukcjach SELECT MySQL?

To niezbyt intuicyjne imho. Na przykład, głupi, staruszkowie myśleli, że usunięcie 1000 usunie górny limit do zapytania SELECT, zwracając w ten sposób wszystkie wyniki.

Dlaczego ktoś chciałby zapytać MySQL o 0 wyników?

+0

Nie musisz określać limitu dla zapytania, jeśli chcesz, aby wszystkie wiersze po prostu pominęły całkowicie klauzulę LIMIT. (Jednak niektóre środowiska, takie jak MySQL Workbench, mają konfigurowalne limity, aby zapobiec przypadkowemu wybraniu wszystkich wierszy z tabeli z wieloma milionami wierszy.) – Uueerdo

+0

'select count (*) from mytable limit 0' jest jednym z takich miejsc, gdzie Widziałem, jak to było używane. Oczywiście, usunięcie 'limit 0' nie ma wpływu na nic tutaj, myślę, że to po prostu TRIES, aby upewnić się, że wiersze nie są zwracane w ogóle. – asgs

Odpowiedz

21

Z MySQL documentation

LIMIT 0 szybko zwraca zbiór pusty. Może to być przydatne do sprawdzania poprawności zapytania. Korzystając z jednego z interfejsów API MySQL, można go również wykorzystać do uzyskiwania typów kolumn wynikowych.

0

* Grzeczne poprawki są mile widziane i doceniane, jeśli jestem nieprawidłowe tutaj, ale:

Rozumiem, że LIMIT 0, 1000 mówi SQL, że chcesz rozpocząć z pierwszego zestawu 1000 Skutkuje to dana baza danych dla podanych kryteriów. Jeśli na przykład zbiór danych zawiera 10 000 wierszy, LIMIT 0, 1000 wyświetli pierwszy zestaw 1000 wyników. Zero jest jak indeks tablicy w kodzie JavaScript - kod zaczyna ITS zliczać z zerem, a nie z jednym, gdy odwołuje się do elementu tablicy. Zatem pozycja # 1 jest w rzeczywistości pozycją # 0, pozycja nr 2 jest faktycznie pozycją nr 1 i tak dalej.

+2

To prawda, ale traktowane jest tylko jako przesunięcie, gdy istnieją dwa parametry. Jeśli jest tylko jeden parametr, parametr traktowany jest jak liczba wierszy. Jednak @Bandon miał prawdziwą odpowiedź na to pytanie. – Devon

+1

Och, widzę, nie wiedziałem tego - dziękuję @Devon! –

+0

Twoje zrozumienie jest poprawne. Ale tak naprawdę nie odpowiada na pytanie, które zadano: ** "Dlaczego ktoś chciałby zapytać MySQL o 0 wyników?" **. – spencer7593

0

Oprócz już udzielonych odpowiedzi, jest to również przydatne, gdy chcesz wykonać operacje na tabeli na podstawie liczby wierszy znajdujących się w tej tabeli.

tj. PHP, jeżeli chcesz usunąć wszystkie wpisy z wyjątkiem jednego z największych id z tabeli „myTable”:

<?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 
?> 

Jest to bardzo przydatne, ponieważ jeśli masz już tylko 1 wiersz w lewo, będziesz z lewej LIMIT 0, czego chcesz.