You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:31:00