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:
@@ -206,7 +206,7 @@ if ($view === 'matrix') {
|
||||
"SELECT s.id AS student_id, a.sim_id, a.results, a.process_log
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
JOIN students s ON s.class_id = ss.class_id AND s.display_name = ss.display_name
|
||||
JOIN students s ON s.id = ss.student_id
|
||||
WHERE a.class_id = ? AND s.deleted_at IS NULL
|
||||
ORDER BY s.id, a.sim_id, a.submitted_at DESC",
|
||||
[$classId]
|
||||
@@ -387,7 +387,7 @@ if ($view === 'fleiss') {
|
||||
COUNT(*) AS sessions
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
JOIN students s ON s.class_id = ss.class_id AND s.display_name = ss.display_name
|
||||
JOIN students s ON s.id = ss.student_id
|
||||
WHERE a.class_id = ? AND $sinceSql AND s.deleted_at IS NULL $modSql
|
||||
GROUP BY s.id, bucket, a.sim_id",
|
||||
$params
|
||||
@@ -553,7 +553,7 @@ if ($view === 'activity') {
|
||||
"SELECT $bucketA AS bucket, s.id AS student_id, s.display_name AS name, s.emoji_avatar AS emoji, COUNT(*) AS n
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
JOIN students s ON s.class_id = ss.class_id AND s.display_name = ss.display_name
|
||||
JOIN students s ON s.id = ss.student_id
|
||||
WHERE a.class_id = ? AND $sinceSqlA AND s.deleted_at IS NULL
|
||||
GROUP BY bucket, s.id",
|
||||
[$classId]
|
||||
@@ -656,10 +656,10 @@ if ($view === 'module') {
|
||||
"SELECT a.id, a.submitted_at, a.duration_ms, a.results, a.reflections
|
||||
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 = ?
|
||||
ORDER BY a.submitted_at DESC
|
||||
LIMIT 100",
|
||||
[$classId, $student['display_name'], $moduleId]
|
||||
[$studentId, $moduleId]
|
||||
);
|
||||
// results + reflections JSON parsen (Frontend sieht's lieber dekodiert)
|
||||
foreach ($runs as &$run) {
|
||||
@@ -851,7 +851,7 @@ if ($view === 'reflections') {
|
||||
ss.display_name, s.id AS student_id, s.emoji_avatar
|
||||
FROM assessments a
|
||||
JOIN student_sessions ss ON ss.id = a.session_id
|
||||
LEFT JOIN students s ON s.class_id = ss.class_id AND s.display_name = ss.display_name AND s.deleted_at IS NULL
|
||||
LEFT JOIN students s ON s.id = ss.student_id AND s.deleted_at IS NULL
|
||||
WHERE a.class_id = ?
|
||||
AND a.reflections IS NOT NULL
|
||||
AND JSON_LENGTH(a.reflections) > 0";
|
||||
|
||||
Reference in New Issue
Block a user