2009-08-20 13 views
8

Suppongo di definire un conteggio "alias" nella mia query di selezione e di limitare l'importo restituito al conteggio/5 (o al 20% della tabella).Mysql - LIMIT by Percentage?

Come posso fare questo? Mysql non sembra prendere nulla ma interi, non funzioni.

risposta

12

Corretto. La clausola LIMIT prende un offset e un conteggio di righe, non una percentuale. Stai pensando a Microsoft SQL Server, che supporta SELECT TOP 20 PERCENT ... (nota che né LIMIT o TOP sono specificati in SQL standard).

Vorrei farlo in due query:

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

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

sostituire il parametro ? con il conteggio/5.

Non è necessario per risolvere ogni problema in una singola query.

+0

solo aggiungere, credo che con questi due query * non * causare un significativo sovraccarico, dal momento che MySQL dovrebbe memorizzare nella cache il risultato della prima query e il secondo verrà eseguito molto più velocemente. – DisgruntledGoat

5

la clausola LIMIT può richiedere 2 argomenti e deve essere una costante di numeri interi.

si può provare qualcosa di simile

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