2009-08-20 22 views
8

Digamos que defino un 'recuento' de alias en mi consulta selectiva y quiero limitar la cantidad devuelta a count/5 (o 20% de la tabla).Mysql - LIMIT por porcentaje?

¿Cómo puedo hacer esto? Mysql no parece tomar nada más que enteros, no funciones.

Respuesta

12

Correcto. La cláusula LIMIT toma un desplazamiento y un recuento de filas, no un porcentaje. Está pensando en Microsoft SQL Server, que admite SELECT TOP 20 PERCENT ... (tenga en cuenta que ni LIMIT ni TOP se especifican en SQL estándar).

Me gustaría hacer esto en dos consultas:

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

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

reemplace el parámetro ? con el recuento/5.

Usted no tiene que resolver todos los problemas en una sola consulta.

+0

Sólo para añadir, creo que la ejecución de estas dos consultas * no * causar significativa sobrecarga, ya que MySQL debe almacenar en caché el resultado de la primera consulta y el segundo realmente se ejecutará mucho más rápido. – DisgruntledGoat

5

la cláusula LIMIT puede tomar 2 argumentos y debe ser constantes de enteros.

puede intentar algo como esto

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