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:
+10
-6
@@ -16,21 +16,25 @@ if ($method === 'GET') {
|
||||
// ─── Sub-View: eigene Reflexionen einer Schüler:in ──────────────────
|
||||
if (($_GET['view'] ?? '') === 'reflections') {
|
||||
if (!$studentSessionId) Response::error('Nur eingeloggte Schüler:innen', 401);
|
||||
$session = $db->fetchOne('SELECT class_id, display_name FROM student_sessions WHERE id = ?', [$studentSessionId]);
|
||||
$session = $db->fetchOne('SELECT class_id, display_name, student_id FROM student_sessions WHERE id = ?', [$studentSessionId]);
|
||||
if (!$session) Response::error('Session nicht gefunden', 404);
|
||||
// Reflexionen über alle assessments dieser Schüler:in (matched über
|
||||
// class_id + display_name, weil verschiedene Sessions denselben
|
||||
// Bearbeiter:innen-Namen tragen können).
|
||||
// student_id (FK) statt fragilem display_name-Join; Fallback für seltene Alt-Sessions ohne FK.
|
||||
$sid = $session['student_id'] ?? null;
|
||||
if (!$sid) {
|
||||
$st = $db->fetchOne('SELECT id FROM students WHERE class_id = ? AND display_name = ?', [$session['class_id'], $session['display_name']]);
|
||||
$sid = $st ? (int)$st['id'] : 0;
|
||||
}
|
||||
// Reflexionen über alle Sessions dieser Schüler:in (per student_id verknüpft).
|
||||
$rows = $db->fetchAll(
|
||||
"SELECT a.sim_id, a.submitted_at, a.reflections
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
WHERE ss.class_id = ? AND ss.display_name = ?
|
||||
WHERE ss.student_id = ?
|
||||
AND a.reflections IS NOT NULL
|
||||
AND JSON_LENGTH(a.reflections) > 0
|
||||
ORDER BY a.submitted_at DESC
|
||||
LIMIT 50",
|
||||
[$session['class_id'], $session['display_name']]
|
||||
[$sid]
|
||||
);
|
||||
$items = [];
|
||||
foreach ($rows as $r) {
|
||||
|
||||
Reference in New Issue
Block a user