mysql - 通过 PHP 组合 MySQL 表
问题描述
我的数据库中有以下表格:
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(100) NOT NULL,
rol varchar(100) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE subjects (
subject_id int(11) NOT NULL AUTO_INCREMENT,
subject text,
PRIMARY KEY (subject_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;
CREATE TABLE users_subjects (
users_subjects_id int(11) NOT NULL AUTO_INCREMENT,
user_id_fk int(11),
subject_id_fk int(11),
FOREIGN KEY(user_id_fk) REFERENCES users(id),
FOREIGN KEY(subject_id_fk) REFERENCES subjects(subject_id),
PRIMARY KEY (users_subjects_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;
CREATE TABLE `answers` (
`exercise_id_fk` int(11) DEFAULT NULL,
`student_id` int(11) DEFAULT NULL,
`difficulty_change` varchar(3) DEFAULT NULL,
`difficulty_student` varchar(30) DEFAULT NULL,
`choice_answer` int(11) DEFAULT NULL,
`correct_answer` tinyint(1) DEFAULT NULL,
KEY `exercise_id_fk` (`exercise_id_fk`),
KEY `answers_constraint` (`student_id`),
CONSTRAINT `answers_constraint` FOREIGN KEY (`student_id`) REFERENCES `users` (`id`),
CONSTRAINT `answers_ibfk_1` FOREIGN KEY (`exercise_id_fk`) REFERENCES `exercises` (`exercise_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
在表' users
'中可以有两种不同角色的用户:'教师'和'学生'。
此外,在表' users_subjects
'中,主题与用户相关。
在我的代码中,当角色为“教师”且拥有 X 个科目的用户登录时,会出现一个表格,并显示answers
与输入的教师具有相同科目的相应学生的“”表格。像这样:
$query = "select exercise_id_fk, student_id, difficulty_change, difficulty_student, correct_answer from answers
where 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');";
问题是在“ student_id ”列中,它显示了学生的“ id ”,而不是用户名。我希望学生的用户名出现在“ student_id ”列中,如下例所示:
$query = "SELECT a.exercise_id_fk, u.username, a.difficulty_change, a.difficulty_student, a.correct_answer from answers
AS a JOIN users AS u ON a.student_id=u.id";
有人可以帮我解决这个问题吗?谢谢
解决方案
您应该为用户添加一个联接
$query = "select a.exercise_id_fk
, a.student_id
, u.username
, a.difficulty_change
, a.difficulty_student
, a.correct_answer
from answers a
INNER JOIN users u ON a.student_id=u.id
where student_id in (
........
无论如何,您应该避免在 SQL 中使用 PHP var .. 您有 sqlijection 的风险 .. 为避免这种情况,您应该查看您的数据库驱动程序以获取准备好的语句和绑定参数
推荐阅读
- java - Java关于实现方法中运行时类型检查的问题
- r - 用 t.test 比较两个以上组中的多个变量
- algorithm - 联合分段算法
- database - l18n_diffsource 只是 TYPO3 中拼写错误的字段吗?
- react-native - 如何缩小 React Native 中的 SectionList 部分?
- android - 为什么折叠工具栏在折叠时显示空白?
- javascript - 使用 JavaScript 的 10 大得分
- php - while循环重复了mysql表中数组的最后一行
- r - 指定 `stratum` 和 `alluvium` 参数而不附加 ggalluvial
- javascript - Vue 是否因为未知的隐藏字符而未显示在文件 #1 中?