student_id-FK-Migration Stufe 1+2: Name-Joins -> student_sessions.student_id
- student_sessions: neue Spalte student_id (+Index), backfilled aus (class_id,display_name) - Session::createStudent setzt student_id (per Lookup, falls nicht uebergeben) - alle Joins students<->student_sessions von display_name auf student_id umgestellt: Benchmark.php, live.php (5x), results.php (4x + runs), modules.php, profile.php, progress.php (answers+runs) - verlustfrei verifiziert (alt-Join == neu-Join, class 99/102) Robuster gegen Umbenennung/Doppelnamen, indexierbare Joins. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ if ($method === 'GET') {
|
||||
|
||||
if ($studentId && $simId) {
|
||||
$progress = $db->fetchOne('SELECT level, xp, plays, best_stars FROM player_progress WHERE student_id = ? AND sim_id = ?', [$studentId, $simId]);
|
||||
$answers = $db->fetchAll('SELECT phase, question_id, answer, correct, answered_at FROM assessment_answers WHERE session_id IN (SELECT id FROM student_sessions WHERE class_id = (SELECT class_id FROM students WHERE id = ?)) AND sim_id = ? ORDER BY answered_at DESC', [$studentId, $simId]);
|
||||
$answers = $db->fetchAll('SELECT phase, question_id, answer, correct, answered_at FROM assessment_answers WHERE session_id IN (SELECT id FROM student_sessions WHERE student_id = ?) AND sim_id = ? ORDER BY answered_at DESC', [$studentId, $simId]);
|
||||
// Optional: alle Durchgänge mit results-JSON, wenn ?runs=1 → für Schüler-Eigen-Drilldown
|
||||
$runs = [];
|
||||
if (!empty($_GET['runs'])) {
|
||||
@@ -59,7 +59,7 @@ if ($method === 'GET') {
|
||||
"SELECT a.id, a.submitted_at, a.duration_ms, a.results
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
WHERE ss.class_id = ? AND ss.display_name = ? AND a.sim_id = ?
|
||||
WHERE ss.student_id = ? AND a.sim_id = ?
|
||||
AND a.results IS NOT NULL
|
||||
AND (
|
||||
JSON_EXTRACT(a.results, '$.stars') IS NOT NULL
|
||||
@@ -70,7 +70,7 @@ if ($method === 'GET') {
|
||||
)
|
||||
ORDER BY a.submitted_at DESC
|
||||
LIMIT 50",
|
||||
[$student['class_id'], $student['display_name'], $simId]
|
||||
[$studentId, $simId]
|
||||
);
|
||||
foreach ($rows as $row) {
|
||||
$row['results'] = $row['results'] ? json_decode($row['results'], true) : null;
|
||||
|
||||
Reference in New Issue
Block a user