2010-04-23 38 views

Respuesta

10

Usted puede utilizar FOUND_ROWS():

SELECT <your_complicated_query>; 
SELECT FOUND_ROWS(); 

Está destinado a usarse con LIMIT, indicando cuántas filas se habrían devuelto sin el LIMIT, pero parece funcionar bien para las consultas que no usan LIMI T.

+2

No te olvides de 'SQL_CALC_FOUND_ROWS' después de' SELECT'. – sectus

2

ver esta consulta para ver ejemplos:

Esta consulta se utiliza para encontrar el registro habitaciones disponibles para un hotel, simplemente si este

SELECT a.type_id, a.type_name, a.no_of_rooms, 
     (SELECT SUM(booked_rooms) FROM reservation 
     WHERE room_type = a.type_id 
     AND start_date >= '2010-04-12' 
     AND end_date <= '2010-04-15') AS booked_rooms, 
     (a.no_of_rooms - (SELECT SUM(booked_rooms) 
        FROM reservation 
       WHERE room_type = a.type_id 
       AND start_date >= '2010-04-12' 
       AND end_date <= '2010-04-15')) AS freerooms 
FROM room_type AS a 
LEFT JOIN reservation AS b 
ON a.type_id = b.room_type 
GROUP BY a.type_id ORDER BY a.type_id 
24

Si lo único que necesita es el recuento después de la agrupación, y no desea utilizar 2 consultas separadas para encontrar la respuesta. Puede hacerlo con una consulta sub así ...

select count(*) as `count` 
from (
    select 0 as `doesn't matter` 
    from `your_table` yt 
    group by yt.groupfield 
) sq 

Nota: Hay que seleccionar realmente algo en la consulta sub, pero lo que seleccione no importa

Nota: Todas tablas temporales debe tener un alias con nombre, por lo tanto, el "sq" al final

Cuestiones relacionadas