-- ============================================================ -- Проверочные запросы v2 -- ============================================================ -- 1. Все тренировки клиента с типом тренировки SELECT c.full_name, w.start_time, wt.name AS workout_type, w.notes, CASE WHEN w.end_time IS NULL THEN '🔥 Активная' ELSE '✅ Завершена' END AS status FROM workouts w JOIN clients c ON c.id = w.client_id LEFT JOIN workout_types wt ON wt.id = w.workout_type_id ORDER BY w.start_time DESC; -- 2. Полная тренировка с дроп-сетами SELECT w.start_time, wt.name AS workout_type, we.exercise_name, CASE WHEN s.is_dropset = 0 THEN printf('%s кг × %s', s.weight, s.reps) ELSE '🔥 DROPSET' END AS set_info, s.rating FROM workouts w LEFT JOIN workout_types wt ON wt.id = w.workout_type_id JOIN workout_exercises we ON we.workout_id = w.id JOIN sets s ON s.workout_exercise_id = we.id WHERE w.id = 1 ORDER BY we.sort_order, s.sort_order; -- 3. Элементы дроп-сета SELECT s.id AS set_id, di.sort_order, di.weight, di.reps FROM sets s JOIN dropset_items di ON di.set_id = s.id WHERE s.is_dropset = 1 ORDER BY s.id, di.sort_order; -- 4. История упражнения (для подсказок) SELECT w.start_time, s.weight, s.reps, s.is_dropset FROM workout_exercises we JOIN sets s ON s.workout_exercise_id = we.id JOIN workouts w ON w.id = we.workout_id WHERE we.exercise_name = 'Горизонтальная тяга' AND w.end_time IS NOT NULL ORDER BY w.start_time DESC LIMIT 10; -- 5. Динамика замеров клиента (для дашборда) SELECT bm.metric_date, mt.name AS metric_name, mt.unit, bmv.value FROM body_metrics bm JOIN body_metric_values bmv ON bmv.body_metric_id = bm.id JOIN metric_types mt ON mt.id = bmv.metric_type_id WHERE bm.client_id = 1 ORDER BY bm.metric_date DESC, mt.sort_order; -- 6. Динамика конкретного замера (например, бицепс) SELECT date(bm.metric_date) AS day, bmv.value FROM body_metrics bm JOIN body_metric_values bmv ON bmv.body_metric_id = bm.id JOIN metric_types mt ON mt.id = bmv.metric_type_id WHERE bm.client_id = 1 AND mt.name = 'Бицепс' ORDER BY bm.metric_date DESC; -- 7. Статистика по клиентам (для тренера) SELECT c.full_name, c.goal, COUNT(DISTINCT w.id) AS total_workouts, SUM(CASE WHEN w.end_time IS NOT NULL THEN 1 ELSE 0 END) AS completed, MAX(w.start_time) AS last_workout FROM clients c LEFT JOIN workouts w ON w.client_id = c.id GROUP BY c.id ORDER BY last_workout DESC; -- 8. Тренировки клиента за последнюю неделю SELECT w.start_time, wt.name AS workout_type, COUNT(DISTINCT we.id) AS exercises_count, SUM(CASE WHEN s.is_dropset = 0 THEN 1 ELSE (SELECT COUNT(*) FROM dropset_items WHERE set_id = s.id) END) AS total_sets FROM workouts w LEFT JOIN workout_types wt ON wt.id = w.workout_type_id LEFT JOIN workout_exercises we ON we.workout_id = w.id LEFT JOIN sets s ON s.workout_exercise_id = we.id WHERE w.client_id = 1 AND w.start_time >= date('now', '-7 days') GROUP BY w.id ORDER BY w.start_time DESC; -- 9. Все упражнения с их типами тренировок SELECT e.name, wt.name AS workout_type FROM exercises e LEFT JOIN workout_types wt ON wt.id = e.workout_type_id ORDER BY wt.sort_order, e.name; -- 10. Все доступные типы замеров SELECT name, unit, category FROM metric_types ORDER BY sort_order;