2011-08-24 3 views
0

다음 쿼리는 그냥 매김 사용에 대한 전체 결과를 계산 할쿼리를 유지하면서 count를 사용하여 총 행을 얻을 수 있습니까?

SELECT video.* from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null 
AND upload_progress.vid_id is null 
ORDER BY video.timestamp DESC LIMIT ?, ? 

비디오라는 테이블에서 모든 결과를 가져옵니다. rowCount()를 사용하면 현재 limit ?,?이 내 수를 줄입니다.

SELECT video.*, COUNT(vid_id) as count from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null 
AND upload_progress.vid_id is null 
ORDER BY video.timestamp DESC LIMIT ?, ?',$variables 

이 쿼리는 하나의 결과 만 있지만 적절한 카운트 수만 반환합니다. 누구든지이 문제를 어떻게 해결할 수 있는지 알고 있습니까?

답변

7

MySQL에는 sql_calc_found_rows 확장자가 있습니다.이 확장은 DB 엔진이 제한 문이 아닌 경우 검색 할 행 수를 계산하도록합니다. 그런 다음 별도의 쿼리에서 [SELECT found_rows()][1]]을 사용하여 전체 행 수를 검색 할 수 있습니다.

부모 쿼리에 대한

기본 구문은 다음과 같습니다

SELECT count(*) from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null 
AND upload_progress.vid_id is null 

그런 다음, 당신이 사용하고있는 언어에서 사이의 작은 결정 : 나는 단순히 총을 계산합니다

SELECT sql_calc_found_rows video.* FROM video 
... 
LIMIT ?,? 
1

반환 된 개수와 쿼리가 두 개로 제한 될 행 수가 있습니까? 매개 변수. PHP의 경우 :

min($query_count,$upper_bound-$lower_bound) 
+0

입력 해 주셔서 감사합니다. 문제는 페이지 매김의 한계가 필요하다는 것입니다. 내 전체 쿼리를 그대로 사용하면 솔루션에서 아무 것도 반환하지 않습니다. – Scarface

+0

항상 하나의 정수를 반환해야합니다. 비디오에서 열을 가져 오려면 한 번, 비디오에서 열을 가져 오려면 한 번, 다른 수를 얻으려면 데이터베이스를 두 번 쿼리해야합니다. – MPelletier

관련 문제