2012-04-28 2 views
0

SQL에서 LIMIT를 적용하기 전에 페이징 선택기의 총 레코드 수를 계산하는 가장 좋은 방법을 찾아 내려고 혼란에 빠졌습니다. 절.날짜 선택, 제한 및 페이징으로 PHP MySql 레코드 수

저는이를 달성하기 위해 2 개의 쿼리를 사용하여 원하는 특정 뷰의 WHERE 절을 변경했습니다.

$sqlcount = "SELECT COUNT(invnum) AS num 
FROM tblinvoices 
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate' 

$sqlquery = "SELECT $fieldlist 
FROM tblinvoices 
INNER JOIN tblcontacts 
ON tblinvoices.invcustid = tblcontacts.ID 
WHERE invcustid>0 AND invstat>0 AND invdate 
BETWEEN '$startdate' AND '$enddate' 
ORDER BY invdate 
LIMIT 0,$pagerows"; 

내 문제는 내가 날짜를 표시 및 페이징과 함께 쿼리를 COUNT 모든 예제는 크게 방식으로 변화하고, 나는 유연하고 효율적인 방법으로 이러한 요구 사항을 결합하는 가장 좋은 방법을 알고 싶어요 것입니다. 내가 COUNT와 한도와 문장의 종류를 결합 할 수 없었습니다

SELECT MIN(date) AS date1, MAX(date) AS date2 FROM mytable 
WHERE (MONTH(date) = (SELECT Month(MAX(date))-1 FROM mytable) 
OR MONTH(date) = (SELECT Month(MAX(date))-2 FROM mytable)) 
AND YEAR(date) = (SELECT YEAR(MAX(date)) 
FROM mytable) 

-

나는 원래 같은 (날짜 범위에 대해) 유연성 방법, 그러나 많은 예 BETWEEN 사용 절을 선택했다 페이징 목적을 가지고 있으며 한 작업에서 둘 다 수행 할 수 있는지 여부를 알지 못합니다. (LIMIT가 COUNT에 영향을 미치기 때문에 가능하지 않습니다.)

가장 좋은 회의 방법에 대한 조언이나 예가 무엇입니까? 이 일반적인 요구 사항이 가장 감사하게 받아 들여질 것입니다. 미리 감사드립니다.

답변

0

나는 당신이 무엇을 요구하고 있는지 완전히 이해하지 못하고 있습니다. 카운트를 얻기 위해이 두 쿼리를 항상 함께 사용하고 있습니까? 그리고 그 카운트와 일치하는 레코드가 있습니까? 그렇다면 GROUP BY 및 COUNT를 사용하는 단일 SQL 문이 트릭을 수행합니다.

나의 엄지 손가락 규칙은 KISS (Keep It Simple Stupid)입니다. 그래서 개인적으로 가능하면 BETWEEN 방법을 고수하고 싶습니다. 그렇지 않으면 항상 달리 지시하는 상황이 있습니다. 비록 당신이 DATE와 COUNT를 어떤 식 으로든 구분할 수 있다고 확신하지 못합니다. 사용중인 을 선택하면 레코드가 레코드 세트에 포함되며 COUNT는 선택한 레코드 그룹에 대해 GROUP BY와 함께 사용되는 집계 함수입니다.

+0

Ok Greg, BETWEEN이 Ok임을 확인해 주셔서 감사합니다. 사용상의 혼란을 용서해 주셨습니다. 방금 2 개의 독립 SQL 쿼리를 사용하여 2 개의 독립적 인 쿼리임을 나타 냈습니다. 나는 당신이 내 예제에서 JOIN을 생략 할 수 있기 때문에 당신이 COUNT (id)를 동일한 WHERE 쿼리를 먼저 사용해야한다는 것을 가정했다. JOIN, DATE와 함께 전체 레코드 세트에 대해 SELECT를 수행 할 수 있기 때문에 상당히 빠르다. 범위 선택 및 LIMIT 절. 내 질문에 여러 가지 방법이 있기 때문에 넓은했지만, 최종 결과는 항상 ADO 후 clunky 보인다. 내보기가 아마도 가장 빠른 방법일까요? – KenAshton

+0

정규화 된 테이블에 잘 구성된 SQL을 작성한다는 전제에서 데이터베이스 엔진은 "효율적으로"데이터 관리 작업을 처리하도록 설계되었으므로이 쿼리는 무엇을 수행하는지 잘 작동합니다. 네가 원해. 정통 주의자들은 그 성명서로 논쟁 할 수 있으며, 학업 성적이 좋을 수도 있지만 성능 문제가 발생하지 않는 한, 사물의 거대한 계획에서 SQL에 아무런 문제가없는 것으로 보입니다. – GDP

+0

저는 습관적으로 테이블을 엄격하게 표준화합니다. 당신은 내가 너무 멀어서 벗어나지 않았다는 것을 안심 시켰습니다 (저는 아마추어입니다). 고마워. – KenAshton