2009-08-20 4 views
8

Angenommen, ich definiere einen Alias ​​'count' in meiner Select Query und ich möchte den Betrag auf count/5 (oder 20% der Tabelle) beschränken.Mysql - LIMIT prozentual?

Wie kann ich das tun? Mysql scheint nichts anderes zu nehmen als ganze Zahlen, keine Funktionen.

Antwort

12

Korrekt. Die LIMIT-Klausel verwendet einen Offset und eine Anzahl von Zeilen, nicht einen Prozentsatz. Sie denken an Microsoft SQL Server, das SELECT TOP 20 PERCENT ... unterstützt (beachten Sie, dass weder LIMIT noch TOP in Standard-SQL angegeben sind).

ich dies tun würde in zwei Abfragen:

SELECT COUNT(*) FROM MyTable WHERE ...conditions... 

SELECT * FROM MyTable WHERE ...conditions... ORDER BY ...order... LIMIT ? 

Ersetzen Sie den Parameter ? mit der Zählung/5.

Sie müssen nicht jedes Problem in einer einzigen Abfrage lösen.

+0

einfach hinzuzufügen, ich glaube, dass diese beiden Abfragen laufen * nicht * zu erheblichen Overhead, da MySQL das Ergebnis der ersten Abfrage zwischenspeichern sollte und das zweite wird viel schneller laufen. – DisgruntledGoat

5

Die LIMIT-Klausel kann 2 Argumente und muss ganze Zahlen Konstanten sein.

Sie so etwas wie dieses

SET @skip=1; SET @numrows=(select count(*) div 5 from tbl); 
PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?'; 
EXECUTE STMT USING @skip, @numrows;