Derzeit arbeite ich auf Art von E-Learning-Plattform, die Kurse und Prüfungen Modul enthalten. Die Idee ist, dass der Kurs von einer Prüfung gefolgt wird. Der Benutzer kann die Untersuchung einige Male lösen (abhängig von der Einstellung in der Untersuchungstabelle). Ich habe ein Modul, in dem ich feststellen muss, ob der Benutzer zur Prüfungs- oder Statistikseite weitergeleitet werden sollte. Wenn der Benutzer nicht alle seine Versuche benutzt hat, sollte er zur Prüfung weitergeleitet werden, ansonsten zu den Statistiken.MySQL-Variablen in verschachtelten Unterabfragen
Also hier ist meine Abfrage (wenig vereinfacht, da alle Bedingungen und Joins der äußeren Abfrage hier keine Rolle spielt), die bestimmen sollte, wohin zu gehen.
SELECT
@course_id := courses.id as id,
IF(
(SELECT X.attempts_count FROM
(SELECT
COUNT(exams_attempts.id) as attempts_count,
@max_attempts := exams.max_attempts
FROM exams
LEFT JOIN exams_attempts ON exams.id = exams_attempts.quiz_id
JOIN users ON exams_attempts.user_id = users.id
WHERE exams_attempts.user_id = 12
AND exams_attempts.course_id = @course_id
HAVING attempts_count >= @max_attempts) as X
),
'stats',
'exam'
) as redirect
FROM courses
WHERE courses.id = 1
Zum Testen Gründen begrenzt I-Kurse auf einen statischen Wert, aber in der tatsächlichen Nutzung zu sehen, es ist große Menge an Kursen.
Und schließlich - ich entdeckte, dass dies auf localhost funktioniert, aber nicht auf dem Server, trotz der gleichen MySql-Version. Ich würde gerne wissen, ob es eine Einstellung gibt, die verhindert, dass meine Anfrage korrekt ausgeführt wird. Ich würde auch gerne wissen, was Sie vorschlagen, vielleicht ist meine Idee nicht gut und ich könnte diese Abfrage neu erstellen?
Dieser Artikel half mir tatsächlich, Variablen zu verstehen und mein Problem zu lösen. Ich empfehle es für alle, die mit etwas fortgeschrittener SQL arbeiten. – Rocket