2011-01-08 4 views
3

현재 SQLite3 데이터베이스와 거의 동일한 SQL 쿼리가 두 개 있습니다.단일 SQL 쿼리의 백분율

일치하는 레코드의 총 개수를 찾으십시오.

SELECT COUNT(runner.id) 
FROM entry 
JOIN runner ON runner.entry_id = entry.id 
JOIN race ON race.id = entry.race_id 
JOIN horse ON horse.id = entry.horse_id 
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND 
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND 
entry.trainer_id = :trainer_id AND 
race.course_id = :course_id AND 
race.type = :race_type 

어디 X = Y 기록 매칭 총 수를 찾는다.

SELECT COUNT(runner.id) 
FROM entry 
JOIN runner ON runner.entry_id = entry.id 
JOIN race ON race.id = entry.race_id 
JOIN horse ON horse.id = entry.horse_id 
WHERE STRFTIME('%Y-%m-%d', race.datetime) < :max_date AND 
STRFTIME('%Y-%m-%d', race.datetime) >= :min_date AND 
entry.trainer_id = :trainer_id AND 
race.course_id = :course_id AND 
runner.position = 1 AND 
race.type = :race_type 

I은 ​​PHP 코드 X = Y 레코드 오프 비율을 계산한다. 단일 SQL 쿼리에서 동일한 결과를 반환하는 방법은 무엇입니까?

EDIT : 최적화와 관련하여 WHERE 조건을보다 정상적인 순서로 전환하고 일부 인덱스를 추가했으며 17 초에서 0.1 초로 감소했습니다. 그리고 PHP의 총에 의해 postionCount를 분할

SUM(CASE WHEN runner.position = 1 THEN 1 ELSE 0 END) as position1Count, COUNT(runner.id) as total 

:

답변

1

은 첫 번째 쿼리를 실행하고 선택을 변경합니다.

+0

완벽한 :) 및 0.5 초 쿼리. 고마워요. –