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에 영향을 미치기 때문에 가능하지 않습니다.)가장 좋은 회의 방법에 대한 조언이나 예가 무엇입니까? 이 일반적인 요구 사항이 가장 감사하게 받아 들여질 것입니다. 미리 감사드립니다.
Ok Greg, BETWEEN이 Ok임을 확인해 주셔서 감사합니다. 사용상의 혼란을 용서해 주셨습니다. 방금 2 개의 독립 SQL 쿼리를 사용하여 2 개의 독립적 인 쿼리임을 나타 냈습니다. 나는 당신이 내 예제에서 JOIN을 생략 할 수 있기 때문에 당신이 COUNT (id)를 동일한 WHERE 쿼리를 먼저 사용해야한다는 것을 가정했다. JOIN, DATE와 함께 전체 레코드 세트에 대해 SELECT를 수행 할 수 있기 때문에 상당히 빠르다. 범위 선택 및 LIMIT 절. 내 질문에 여러 가지 방법이 있기 때문에 넓은했지만, 최종 결과는 항상 ADO 후 clunky 보인다. 내보기가 아마도 가장 빠른 방법일까요? – KenAshton
정규화 된 테이블에 잘 구성된 SQL을 작성한다는 전제에서 데이터베이스 엔진은 "효율적으로"데이터 관리 작업을 처리하도록 설계되었으므로이 쿼리는 무엇을 수행하는지 잘 작동합니다. 네가 원해. 정통 주의자들은 그 성명서로 논쟁 할 수 있으며, 학업 성적이 좋을 수도 있지만 성능 문제가 발생하지 않는 한, 사물의 거대한 계획에서 SQL에 아무런 문제가없는 것으로 보입니다. – GDP
저는 습관적으로 테이블을 엄격하게 표준화합니다. 당신은 내가 너무 멀어서 벗어나지 않았다는 것을 안심 시켰습니다 (저는 아마추어입니다). 고마워. – KenAshton