通过PHP关联MySQL表:将学生ID替换为用户名的查询问题
解决教师查看同科目学生答题数据时显示用户名而非ID的问题
我来帮你搞定这个需求!你只需要在原有查询的基础上关联users表,就能把student_id替换成学生的username了,这里提供两种可行的实现方案:
方案一:保留原有子查询逻辑(改动最小)
直接在主查询中加入users表的关联,同时调整要查询的字段:
SELECT a.exercise_id_fk, u.username AS student_username, -- 替换成学生用户名,起别名让结果更清晰 a.difficulty_change, a.difficulty_student, a.correct_answer FROM answers AS a JOIN users AS u ON a.student_id = u.id -- 关联用户表获取用户名 WHERE a.student_id IN ( SELECT usAlu.user_id_fk FROM users uProf JOIN users_subjects usProf ON usProf.user_id_fk = uProf.id JOIN users_subjects usAlu ON usProf.subject_id_fk = usAlu.subject_id_fk JOIN users uAlu ON usAlu.user_id_fk = uAlu.id WHERE uProf.username = '" . $_SESSION['username'] . "' AND uAlu.rol = 'student' );
这个方案的好处是完全保留了你原来筛选同科目学生的逻辑,只需要在主查询中增加关联和字段替换,改动非常小。
方案二:优化为多表JOIN(性能更优)
如果你的数据量比较大,可以把原来的子查询改成多表JOIN的形式,逻辑和原查询一致,但性能可能更好:
SELECT a.exercise_id_fk, uAlu.username AS student_username, a.difficulty_change, a.difficulty_student, a.correct_answer FROM answers AS a -- 关联学生用户表获取用户名 JOIN users uAlu ON a.student_id = uAlu.id -- 关联学生的科目关系表 JOIN users_subjects usAlu ON uAlu.id = usAlu.user_id_fk -- 关联到教师的科目关系(确保是同科目) JOIN users_subjects usProf ON usAlu.subject_id_fk = usProf.subject_id_fk -- 关联到当前登录的教师用户 JOIN users uProf ON usProf.user_id_fk = uProf.id WHERE uProf.username = '" . $_SESSION['username'] . "' AND uAlu.rol = 'student';
重要提醒:SQL注入风险
直接把$_SESSION['username']拼接到SQL语句里存在SQL注入的安全隐患,建议你使用预处理语句来重构这段代码,比如用PDO的prepare和execute方法,或者mysqli的预处理功能,这样能有效避免安全问题。
内容的提问来源于stack exchange,提问作者ana
相关产品推荐
相关产品推荐

