我的数据库中有以下表格:
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;
在我的代码中,一个注册用户的角色是“老师”,并分配了主题“X”, 可以在表格中看到所有注册的学生及其各自的科目。
但是,我正在尝试执行一个选择,其中显示角色为“学生”的用户,并为他们分配与注册教师相同的“X”科目。
我正在尝试这样做,但它不起作用:
$sql = "SELECT * FROM users where rol ='student' and id in (select distinct u.id from users u,users_subjects us where u.username='".$_SESSION['username']."' and us.user_id_fk=u.id and e.subjects=us.subject_id_fk);";
$result = $conn->query($sql);
有人可以帮我看看 SELECT 有什么问题吗?谢谢
最佳答案
您使用别名e
,但未加载。您还可以测试 subject
和 subject_id_fk
之间的相等性
SELECT *
FROM users
where rol = 'student'
and id in (
select distinct u.id
from users u, users_subjects us, subjects e
where u.username='".$_SESSION['username']."'
and us.user_id_fk=u.id
and e.subject_id=us.subject_id_fk
);
但是如果他的角色是学生,这个查询将为您提供与 $_SESSION['username'] 相关的用户行。我猜您正在寻找的好查询是以下一个:
SELECT *
FROM users u
JOIN users_subjects us ON (us.user_id_fk = u.id)
JOIN subjects s ON (s.subject_id = us.subject_id_fk)
WHERE u.username = '".$_SESSION['username']."'
AND u.rol = 'student'
关于php - 从Mysql中获取数据到php中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56174119/