2010-04-23 8 views

Antwort

10

Sie können FOUND_ROWS() nur überprüfen verwenden:

SELECT <your_complicated_query>; 
SELECT FOUND_ROWS(); 

Es ist wirklich für die Verwendung mit LIMIT gedacht und sagt Ihnen, wie viele Zeilen ohne LIMIT zurückgegeben worden wären, aber es scheint gut für Abfragen zu funktionieren, die LIMI nicht verwenden T.

+2

Vergessen Sie 'SQL_CALC_FOUND_ROWS' nicht nach' SELECT'. – sectus

2

sehen diese Abfrage für Beispiele:

Diese Abfrage verwendet wird, um die zur Verfügung stehenden Zimmer Rekord für ein Hotel zu finden, das

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

Wenn das einzige, was Sie brauchen, ist die Anzahl nach der Gruppierung, und Sie wollen nicht 2 separate Abfragen verwenden, um die Antwort zu finden. Sie können es mit einer Sub-Abfrage tun, wie so ...

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

Hinweis: Sie müssen tatsächlich etwas in der Sub-Abfrage wählen, aber was Sie wählen spielt keine Rolle

Hinweis: Alle temporären Tabellen Haben Sie einen Namen Alias, daher die "sq" am Ende