php - 从Mysql中获取数据到php中

标签 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;

在我的代码中,一个注册用户的角色是“老师”,并分配了主题“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,但未加载。您还可以测试 subjectsubject_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/

相关文章:

php - 如何在 PHP 中将一个整数除以多个值?

php - 显示 PHP 结果?

php - 如何使用php批量删除记录

Microsoft SQL Server、Oracle、MySQL 和 DB2 的 C# 数据库抽象

php - Codeigniter Group 通过仅返回第一行

php - 确保在使用 PHP 时考虑所有异常

php - 当数据存储在 session 中时如何从 post 方法创建整数数据类型

php - 如何使用一对多、双向 Doctrine ?

MYSQL如何通过LONGBLOB进行选择

PHP 准备语句插入查询