2013-03-10 5 views
0

나는 현재 다음과 같습니다 쿼리가 : 결과는과 같이 전화 아약스 다시 jQuery를 $로 전송됩니다는 jQuery를/JSON 객체로 돌아

$queryMovies = "SELECT 
    m.movieID, 
    n.title, 
    m.directorID, d.directorFirstName, d.directorLastName, 
    m.runTime, 
    m.yearReleased, 
    m.synopsis, 
    m.formatID, f.format, 
FROM movies m 
LEFT JOIN directors d ON d.directorID = m.directorID 
LEFT JOIN format f ON f.formatID = m.formatID 
ORDER BY title"; 

:

를 S로 당신이 할 수있는 (

... 
'<div class="synopsisCell">' + 
    'Synopsis<br />' + 
    '<label class="lblSynopsis">' + element['synopsis'] + '</label>' + 
'</div>' + 
'<div class="formatCell">' + 
    '<label class="lblFormat">' + element['format'] + '</label>' + 
'</div>' + 
'<div class="yearCell">' + 
    '<label class="lblYear">' + element['yearReleased'] + '</label>' + 
'</div>' + 
... 

:

$arr = array(); 

while($row = mysqli_fetch_array($resultMovies, MYSQLI_ASSOC)) { 
    $arr[] = $row; 
} 
header('Content-Type: application/json'); 
echo json_encode($arr); 

$ 아약스 호출의 성공 함수는이 같은 데이터 뭔가를 처리 전체 출력의 불완전한 스 니펫입니다.)

데이터가 삽입되는 테이블에 페이지 매김을 추가해야하는데이 문제를 처리하는 가장 좋은 방법은 확실하지 않습니다. (전 페이지 매김 프로그래밍을 한 적이 한번도 없었습니다)

레코드 수를 얻는 별도의 쿼리를 추가하기 시작했는데 (얼마나 많은 페이지가 있는지 결정하기 위해) 나는 여전히 LIMIT을해야한다는 것을 깨달았습니다. 등 시작과 페이지 매김을위한 레코드 수, 등,와 절

나는이 시점에서 두 가지 일을 궁금하네요

: 나는 어떤 방법으로 기존의 쿼리에 레코드 수를 추가 할 수

A)/return 코드를 사용하여 jQuery 측에서 페이지 번호 및 다음/이전/첫 번째/마지막 페이지 링크를 생성 할 수 있습니다.

나 :

B는) 내가 아마 JSON 개체에서 어떻게 든 레코드의 수를 점점하여 JS 측에 완전히 페이지 매김을 처리하고, 예를 들어 20 개 기록)의 설정 결과의 어떤 설정을 (표시 할 수 있습니다 테이블에 표시 하시겠습니까?

사용자가 페이지 매김 탐색 링크를 클릭 할 때마다 매번 쿼리를 다시 실행해야하거나 과도한 서버/데이터베이스 쿼리를 피하기 위해 JS에 해당 정보를 "저장"할 수있는 방법이 있습니다. ?

나는 정확한 코딩을 원하고 있지 않다. 올바른 방향으로 시작하려면 의사 코드가 필요하다.

누구에게 도움을 주셔서 감사합니다.

답변

1

A)는 카운트를 이용하고 SQL_CALC_FOUND_ROWS 한 쿼리 제한된 결과를 반환 할 수있다. 성능상의 이유로 두 개의 별도 명령문을 사용하는 것이 probably be faster입니다.

B) 가능합니다. 모든 결과를 얻고 페이지에 따라 결과를 숨기거나 숨기기를 취소 할 수 있으며 새 페이지를 선택할 때 브라우저를 다시로드하지 않을 수도 있습니다. 큰 결과 집합을 기대하는 경우 비용이 많이 드는 방법 일 수 있습니다. 이 도움이

// query, get result count 
$count = ... COUNT(*) 

// for pagination 
$results_per_page = 20; // arbitrary number 
$total_pages = ceil($count/$results_per_page); 
if(isset($_GET['page_num']) && $_GET['page_num'] > 0) { 
    $page_num = $_GET['page_num']; // for example 2 
} 
else { 
    $page_num = 1; 
} 
$upper_limit = $results_per_page * $page_num; 
$lower_limit = $upper_limit - $results_per_page; 

// query limited results 
... LIMIT ".$lower_limit.", ".$results_per_page." 

희망 :

데이터베이스 측에서 결과를 제한하려면

.

+0

고마워, bigbr. JS 기반의 페이징 솔루션에 기대고 있지만 PHP 쿼리에 대한 정보도 도움이되었습니다. – marky

0
// on php 
// $page, default is 1 
$page = isset($_GET['page']) : $_GET['page'] : 1; 
// $rows in page, default is 20 
$limit = isset($_GET['limit']) : $_GET['limit'] : 20; 
$offset = ($page - 1) * $limit; 
$queryMovies = "SELECT 
    m.movieID, 
    n.title, 
    m.directorID, d.directorFirstName, d.directorLastName, 
    m.runTime, 
    m.yearReleased, 
    m.synopsis, 
    m.formatID, f.format, 
FROM movies m 
LEFT JOIN directors d ON d.directorID = m.directorID 
LEFT JOIN format f ON f.formatID = m.formatID 
ORDER BY title 
LIMIT $offset, $limit"; 

// can't remember if this going to work but this should 
// give you an idea 
$arr['config'] = array('current_page' => $page, 'limit' => $limit, 'total_number_of_rows' => 10000); 

// do the json encoding 

// in javascript you should use the info of 
// the current_page to tell the user in what page he is 
// using total_number_of_rows and limit, calculate the pages and show them to the 
// user so he knows how many pages there are