2010-04-23 40 views

Trả lời

10

Bạn có thể sử dụng FOUND_ROWS():

SELECT <your_complicated_query>; 
SELECT FOUND_ROWS(); 

Nó thực sự được dự định để sử dụng với LIMIT, cho bạn biết có bao nhiêu hàng sẽ được trả về mà không có LIMIT, nhưng có vẻ như nó hoạt động tốt cho các truy vấn không sử dụng LIMI T.

+2

Đừng quên về 'SQL_CALC_FOUND_ROWS' sau' SELECT'. – sectus

2

thấy truy vấn này cho ví dụ:

truy vấn này được sử dụng để tìm các kỷ lục phòng có sẵn cho khách sạn, chỉ cần kiểm tra này

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

Nếu điều duy nhất bạn cần là số sau khi nhóm, và bạn không muốn sử dụng 2 truy vấn riêng biệt để tìm câu trả lời. Bạn có thể làm điều đó với một truy vấn phụ như vậy ...

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

Lưu ý: Bạn phải thực sự chọn một cái gì đó trong truy vấn phụ, nhưng những gì bạn chọn không quan trọng

Lưu ý: Tất cả các bảng tạm thời phải có bí danh được đặt tên, do đó "sq" ở cuối

Các vấn đề liên quan