2008-11-14 3 views
0

페이지의 항목 수에 대한 정보를 얻고 필요한 LIMIT를 사용하여 SQL 쿼리를 만드는 가장 효율적인 방법을 의미합니다. 또는 나는 모든 항목을 가져 와서 PHP 함수로 배열 자르기를해야합니까?페이지 제어를 수행하는 방법은 무엇입니까?

이제는 두 가지 쿼리를 수행합니다. 먼저 모든 항목 수를 계산하고 두 번째 항목은 LIMIT으로 가져옵니다.

좋습니다. 좀 더 구체적으로 설명 드리겠습니다. 예를 들어 내 페이지에 질문을 표시하고이 질문에 20 개의 답변을 표시해야합니다. 아래쪽에는 페이지 컨트롤이 있습니다 : 다음 페이지로 연결, 이전 페이지 등등. 적절한 수의 링크 (답변 수/20)를 보여주고 싶습니다. 그리고 어떤 링크로 가도 나는 적절한 답 (예 : 41 페이지에서 60 페이지)을 받기를 원합니다. 그렇다면 적절한 수의 링크를 표시하고 각 링크에 대해 적절한 답변을 얻으려면 항목 (응답) 수를 얻는 가장 좋은 방법은 무엇입니까?

+0

나는 당신이 무엇을 성취하려고하는지 전혀 모르지만 질문을 다시 형식화 할 수 있습니까? –

+0

페이지 매김을 검색해보십시오. 비슷한 질문이 이미 있습니다. –

답변

1

페이지 매기기 또는 이와 유사한 작업을하기 위해 읽는 행 수를 원한다고 가정합니다. 귀하의 질문과 관련하여 귀하의 필요성을 이해하지 못합니다. 그러나 발견 된 행 수를 계산하려면 다음 중 하나를 사용하십시오.

select count(*) as counted, name, address 
from contact 

또는 발견 행 :

당신은 같은 모든 행의 수를 선택

SELECT SQL_CALC_FOUND_ROWS, name, address 
from contact 

이 잘 모르겠어요 mysql을 특정 할 수있다.

업데이트 : 다음과 같이 할 것 매김 들어

- (Psuedocode)

$ 행 = 배열 ​​($ 결과)
$ NUM_ROWS = SQL_CALC_FOUND_ROWS
$ per_page = 20
$를 페이지 = CEIL ($ NUM_ROWS/$ per_page)

페이지
$의 rows_this_page = 배열()
$ rows_this_page = get_values ​​($ 행 (인덱스 분) $의 PAGE_NUMBER * $으로의 per_page - $ per_page (최대 인덱스) $의 PAGE_NUMBER * $으로의 per_page - 1)

+0

대단히 감사합니다. 적절한 항목 (답변)을 얻으려면 LIMIT가 필요합니다. 그렇지 않으면 할 수 있습니까? – user37590

+0

알려진 수의 행이 필요한 경우에만 LIMIT을 사용합니다. 예를 들어 최고 50 개의 답변을 원하면 50 개로 제한하고 50 개로 제한 할 수 있습니다. 그런 다음 전혀 계산하지 않아도됩니다. 질문을 좀 더 잘 설명해야합니다. –

+0

글쎄, 31에서 50까지의 답변이 필요할 경우 나는 LIMIT 31,20을 사용합니까? – user37590

2

I가 your'e가하려고 생각 검색어에 포함 된 항목/답변 수를 알고 싶지만 시간별로 최대 20 개의 항목을 페이지 매기기 만 읽을 수 있습니다.

먼저 : 페이지 매김 패키지를 찾아야합니다. 많은 사람들이 이전에 같은 문제를 겪었고 아마도 프로그래밍 언어와 프레임 워크를위한 무료/오픈 소스 및 독점 솔루션이 모두 존재할 것입니다. 나는 사물이 작동하는 방법을 알고 싶은을 알고, 어쨌든

을 (. 당신이 사용하는 어떤 언어로 말한다면 나는 누군가가 당신을 위해 솔루션을 권하고 있습니다 확신), 그래서 이것은 일반적으로 수행하는 방법입니다

페이징 코드는 select count(*) from tblX where something을 사용하여 하나의 쿼리를 수행하여 페이지 수와 사용 한도 (예 : 4.1 => 5)로 나누어 페이지를 계산합니다.

페이지 당 결과를 나열하려면 쿼리가 필요합니다. 카운트 쿼리가 필요없는 것들을 버리는 것보다 훨씬 더 빠름을 걱정하지 마십시오. (이것이 this page에 관한 최고의 기사가되기위한 레시피)입니다. 예 : select * from tblX where something limit Y offset Z 여기서 Y는 페이지 당 항목 수이고 Z는 (requested_page - 1)*Y입니다. 페이지 1은 오프셋 0을, 페이지 2는 오프셋 20을 갖습니다 (Y가 무엇인지).

수동으로 구현하지 마십시오. 미리 준비된 솔루션.

+0

나는 배열 (php)에 모든 것을로드하고 페이지에서 배열로 전달하며 각 페이지에 배열의 하위 집합을 나열합니다. 그렇게하면 많은 데이터베이스 호출을 피할 수 있습니다. 트래픽과 쿼리가 많이 필요한 경우에만 실제로 필요합니다. –

+0

그리고 10000 개의 항목이 있다면? 그런 배열을 통과 시키시겠습니까? 또는 매번 쿼리를 수행합니까? – user37590