В настоящее время у меня есть два почти идентичных запроса SQL, которые я использую для своей базы данных SQLITE3.
Найти общее количество подходящих записей.
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
Затем я вычисляю процент от x = y записей в коде PHP. Как бы я сделал то же самое, возвращая процент от одного SQL-запроса?
РЕДАКТИРОВАТЬ: Что касается оптимизации, я только что переключил условия WHERE в более нормальный порядок, и добавил некоторые индексы, и это снизилось с 17 до 0,1 секунд.