2012-10-09 5 views
0

많은 데이터가있는 테이블이 있으므로 한 번에 한 페이지 씩 불러 와서 표시합니다 (내 테이블은 길어서 전체 테이블에서 실행할 수 없습니다).MySql이 제한없이 반환 한 결과 수를 얻는 방법은 무엇입니까?

그러나 결과에 페이지 매김을하고 싶습니다. 그래서 테이블에있는 요소의 총 개수를 알아야합니다.

동일한 요청에서 COUNT(*)을 수행하면 선택한 요소의 수가 표시됩니다 (필자의 경우 10 개).

두 번째 요청에서 내 테이블에 COUNT(*)을 수행하면 내 기본 쿼리에서 where, join 및 having 절이 있기 때문에 결과가 잘못되었을 수 있습니다.


하나의 솔루션이 될 것으로 보인다이 특정 요청에 대한 내 테이블에있는 요소의 최대 수를 알고 데이터를

  • 검색 :

    에 가장 깨끗한 방법은 무엇입니까 Mysql function FOUND_ROWS :

    나는 이것을 시도했다 : mysql_query perfo 실효 한 번에 쿼리 내 쿼리 결과를 반환하지 않습니다 반면

    Array ([0] => 0) 
    

    : (here를 촬영)

    $query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users'; 
    $result = mysql_query($query); 
    // fetching the results ... 
    
    $query = 'SELECT FOUND_ROWS()'; 
    $ result = mysql_query($query); 
    
    // debug 
    while ($row = mysql_fetch_row($result)) { 
        print_r($row); 
    } 
    

    그리고 0 결과 배열을 얻었다.

    내 접근 방식에 어떤 문제가 있습니까? 더 나은 해결책이 있습니까?

  • +1

    mysql_num_rows()? –

    +0

    결과를 $ result 변수에 저장하지 않았습니다 ... – Vafliik

    +0

    @MihaiIorga mysql_num_rows는 LIMIT 절의 영향을받습니다. 필자의 경우 10을 반환합니다. –

    답변

    0

    위의 코드는 정상적으로 작동합니다. 연결을 제대로 열지 못했습니다.

    출력은 다음과 같습니다

    Array ([0] => 10976) 
    

    나는 아직도 의존에는 mysql되지 않고 그것을 할 수있는 다른 방법, 특히 무언가에 대한 관심이 있습니다.

    +0

    MySQL이 최선의 방법입니다. PHP로 할 수있는 것보다 데이터베이스에 대해 더 많이 알고 있습니다. – MatthewMcGovern

    +0

    어떤 선택을해야할지 선택하지만 쿼리에 벤치 마크를 실행하는 것이 좋습니다. 비록 SQL_CALC_FOUND_ROWS가 멋지지만 성능면에서는 나쁜 선택입니다. [http://www.mysqlperformanceblog.com/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows]를 참조하십시오. –

    0

    On 인 경우 mysql.trace_mode에서 Off으로 설정하십시오.

    ini_set('mysql.trace_mode','Off'); 그건 당신이 일 이상 게시 된 코드는 다음 LIMIT 카운트없이 쿼리를 다시 실행해야합니다하지 않는 경우 my.cnf의

    을 편집 할 수없는 경우 호스트 구성에 따라 작동 할 수 그런 식으로.

    관련 문제